DOS で動作する Schemy Lisp

2026/09/06 21:58

DOS で動作する Schemy Lisp

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

改善された要約:
SLED("Scheme Lisp en DOS")は、Kilo LISP から派生し、Scheme に着想を得た「Ur-Lisp」であり、FreeDOS、MS-DOS といった厳格な DOS 環境や DOSBox-X などのエミュレーター用に特別に設計されています。固定メモ制限(12,288 ノード)でリアルモード動作を行い、不変データ構造(ペア/cons セルとアトム)およびネイティブ数値型なしで自然数をシミュレートする独自のタリ記数体系を採用し、効率性を優先しています。このシステムは

inc
dec
zero?
によって管理されます。16 ビットアーキテクチャにおけるスタックオーバーフローを防ぐため、SLED は関数(
lambda
let
など)に対してトランポリン評価機とテールコール最適化を採用しています。同言語は 8.3 ファイル命名規則(推奨拡張子
.scm
)およびシンボルテーブルの文字制限 2048 文字といった歴史的制約を遵守し、記号は小文字 16 文字までとし、特定のエスケープ則が適用されます。同言語は未評価評価モデルを採用しており、クォートされていないデータはコードとして扱われ、エラー処理はトップレベルへジャンプして
error?
で確認可能であり、シャドウリング不可の不変コアライブラリを備えています。将来の開発計画は示されていませんが、SLED は厳格なリアルモード制約下での複雑な評価モデルを理解するための重要な教育ツールとして役立ち、現代ハードウェアではエミュレーターを通じて実行可能です。

本文

SLED (Scheme LISP in DOS)

SLED(Scheme LISP in DOS)は、DOS(ディスクオペレーティングシステム)上で動作する純粋な記号的 LISt プロセッサ(LISP)です。Kilo LISP から派生し、Ur-Lisp の一部として機能します。FreeDOS や MS-DOS 本番、および DOSBox などの上でも実行可能です。

SLED の入手方法:

  • リリース版ダウンロード(コンパイル済みバイナリを含む)
  • ソースコードリポジトリ
  • バックアップリポジトリ

データ構造

SLED は主に 2 つの基本的なデータ型、ペア(Pair)と原子(Atom)を持ちます。

記号 (Symbol)

一意の名前であり、以下の文字を最大 16 文字 の組み合わせで構成されます。

  • 使える文字:
    a-z
    0-9
    -
    .
    ?
    _
  • 先頭制約:
    .
    で始まることはできません。
  • エスケープ文字:
    \
    を使用すれば、印字不可能な ASCII 文字も記号の一部になります(例外:
    (
    )
    '
    )。大文字は自動的に小文字に変換されます。

例:

nil           ; 特殊記号
sym!          ; 名前付きの記号 (例)
\             ; バックスラッシュ
a-1_0         ; アルファベット、数字、記号的文字列

特殊記号 (Special Symbols)

システムが管理する定義済みの特殊記号です。

  • 空リスト:
    nil
    (最も重要)
  • 詳細はインデックスを参照してください。

引用 (Quote)

データとして宣言するには「評価しない」処理を行います。

  • 明示的構文:
    (quote sym)
  • 略法構文:
    'sym

例:

(quote hello)  ; → hello
'hello         ; → hello

ペア (Pair)

頭(head)と尻尾(tail)を持つ構造体です。要素は不変です。

  • ドット構文:
    '(a . x)
  • 組み込み関数:
    (cons 'a 'x)

例:

'(a . nil)           ; (a)
'(a . (b . nil))     ; (a b)

リスト (List)

尻尾が

nil
で終わるペアの連続です。

  • リストリテラル:
    '(a b)
    または
    '()
  • 関数呼び出し:
    (list 'a 'b)

例:

nil                  ; ()
'()                  ; nil
'(a b)               ; (a b)
'(a b c)             ; (a b c)

不規則リスト (Improper List)

nil
で終わらず、ペアが途中から終了するリストです。

例:

(a . (b . (c . d)))

関連リスト (Association List / alist)

各要素がキーと値のペアであるリストです。

例:

((a . x) (b . y) (c . z))
  • キー: ペアの頭部
  • : ペアの尾部

S-Expression

S 式は、原子またはペアのいずれかで構成されるデータ構造です。データとしてもソースコードとしても利用されます。

数値

SLED にはネイティブの数値型はありませんが、リストを用いて自然数(計算記号)を表現します。

  • nil
    → 0 (ゼロ)
  • (nil)
    → 1
  • (nil nil)
    → 2
  • (nil nil nil)
    → 3

関連関数:

inc
(加算),
dec
(減算),
zero?
(ゼロチェック)。


コードと評価

引用されていないデータはコードとして評価されます。

式 (Expressions)

評価可能な項目:

  • バインディング (
    define
    )
  • 関数 (
    lambda
    )
  • 特殊形式 (
    if
    ,
    quote
    など)

バインディング

(define a 'x) ; 'a という記号に 'x を結びつける

クロージャ(環境付き関数)

(define fun (lambda (arg1 arg2) (print arg1) (print arg2)))

関数適用

リストの最初を関数、残りを引数とします。

  • 評価スタイル: **急進的 **(Eager)(引数は全て最初に評価される)。

例:

(fun arg1 arg2)

引数の受け取り方

  • (lambda x ...)
    x
    はリスト全体として受ける。
  • (lambda (x y) ...)
    x
    ,
    y
    に分解する。
  • (lambda (x y . z) ...)
    z
    は残りのリスト(オプション引数)。

再帰とスタック管理

  • スタックオーバーフロー対策:
    1. Trampoline エバリュエーター
    2. **テールコール最適化 **(TCO)
      • lambda
        ,
        let
        ,
        begin
        ,
        if
        ,
        ifnil
        ,
        apply
        等で機能。

エラー処理

  • エラー発生時はトップレベルへ戻り、再試行可能。
  • 式内でのエラーキャッチは不可。

不変性とシャドウ化

  • 特殊記号特殊形式組み込み関数標準ライブラリの内容は変更不可能。
  • これらはシャドウ化(隠蔽)できない。

システム環境

ファイル名

  • DOS 8.3 規格に準拠(最大 8 文字 + ドット + 拡張子 3 文字)。
  • 推奨拡張子:
    .scm
    (標準ライブラリ:
    sled.scm
    )。
  • インタープリターは拡張子を強制しない。

スタートアップ動作

起動時に自動的に標準ライブラリ (

sled.scm
) を読み込みます。これに含まれる定義は不変です。

コマンドライン引数

sled には以下のような排他的な引数が存在します。

  1. ヘルプ表示:
    C:\> sled /?
  2. ソースファイル読み込みと REPL:
    C:\> sled code.scm
  3. バッチモード (実行後終了):
    C:\> sled /B code.scm
  4. エラー無視・続行:
    C:\> sled /I code.scm
  • パスの注意点: バックスラッシュ
    \
    はエスケープが必要。
    • コマンド:
      sled to\my\code.scm
      (実際は文字列内での表現)
    • 式内:
      (load 'to\\my\\code.scm)
    • ファイルパスも 16 文字制限。

REPL (リードル・エバル・プリント・ループ)

起動直後にインタラクティブモードが始まります。

  • プロンプト:
    sled>
  • 動作: 入力 → 評価 → 結果表示 → プロンプトへ戻る。
    sled> (println 'hello _ 'world)
    hello world
    sled>
    

入力に関する注意点

  • 拡張文字: 2 バイトの拡張文字(例:
    α
    )はエコーに問題を起こすため、避けるべきです。

エンド処理 (終了方法)

  1. シンボル入力: トップレベルで特定の終了シンボルを入力。
  2. 関数呼び出し:
    (exit)
    を評価。

コメント

  • 行コメント:
    ;
    で開始(改行まで無視)。
  • ブロックコメント:
    (comment ...)
    で囲む(括弧のバランスは必須)。

コード例

;;;; メインタイトル
;;; セクションタイトル
;; 行の開始
; 行の終了

(comment this is ignored) ; OK
(comment ( )               ; エラー: 括弧が合わない

システムコントロール

  • 中断:
    CTRL+Break
    (計算停止)、
    CTRL+C
    (入力中断)。
  • ヘルプ: REPL で
    ?
    を入力すると関数リストが表示されます。

制限事項 (DOS アプリケーション)

  • ヒープサイズ: ノード最大 12288
  • 記号表: 文字最大 2048
  • 標準ライブラリ自体が約 5% のリソースを消費します。

インデックス

特殊形式 (Special Forms)

定義や制御構文を提供するもの:

  • define
    : バインディング作成
  • lambda
    : クロージャ作成
  • let
    : ローカルバインディング(単一のみ許可)
  • if
    /
    ifnil
    : 条件分岐
  • begin
    : 順序評価
  • quote
    /
    '
    : 引用
  • comment
    : コメント

標準ライブラリ関数一覧

以下に主要な機能を提供する関数がまとめられています。

基本データ操作

  • リスト:
    (list ...)
    ,
    (cons ...)
    ,
    (append ...)
  • アクセス:
    (head ...)
    ,
    (tail ...)
    car
    /
    cdr
    の代替)
  • テスト:
    atom?
    ,
    pair?
    ,
    empty?
    ,
    nil?

数値 (計算記号)

  • inc
    : リストに要素を追加(カウントアップ)
  • dec
    : リストから要素を削除(カウントダウン)
  • zero?
    : 空リストかどうかの判定

論理制御

  • 条件:
    and?
    ,
    or?
    (注意: 両方の引数を評価する二元関数)
  • 分岐:
    if
    ,
    ifnil
    ,
    when
    (not),
    unless
    (not)
  • 否定:
    not

検索・代入

  • get
    : 関連リストから値を取得(見つからない場合 nil)
  • put
    : 関連リストにキーと値を追加/更新
  • member
    : リスト内の要素を検索してサブリストを返す
  • eq?
    /
    equal?
    : 同一性・構造的等価性の判定

関数操作

  • 適用:
    (apply fun args)
    : リストの要素を展開して実行
  • マッピング:
    (map fun lst)
    : リストに一元関数を適用
  • パイプライン:
    (compose arg fun1 ...)
    : 関数のチェーン化

入出力・環境

  • print
    /
    println
    : 標準出力表示
  • read
    : 入力行を読む
  • load
    : ファイルを読み込んで評価(最大 2 重ネスト可)
  • gc
    : ガベージコレクションの実行

コントロールフロー

  • error
    : エラー発生と中断
  • exit
    /
    quit
    : インタープリター終了
  • restart
    : インタプリターの再起動(定義を破棄)
  • self
    : 匿名再帰の実装補助

使用方法 (ビルド)

SLED は DOS 向けですが、Linux/Mac/Unix ではシェルスクリプト

./sled.sh
を使用します。

ビルド環境

  • Microsoft C コパイラー (MSC) または Open Watcom (OWC)
  • Make ファイルを使用(
    addmake

コマンド例

# MS C 6.0A でビルド
make build_msc

# Open Watcom v2 でビルド
make build_owc

# ビルド後実行
make run

# テストとベンチマーク
make tests
make bench    ; Takeuchi 関数による性能測定

比較資料

他の MS-DOS ベースの LISP(Kilo LISP など)との比較や、実装詳細については関連リンクを参照してください。


ライセンス

このプロジェクトは **0BSD **(Zero-Clause BSD) ライセンスの下で提供されています。

同じ日のほかのニュース

一覧に戻る →

2026/09/11 0:29

Cognition が新たな SWE-2 モデルを発表。Fable 5.1 や GPT-Astra と競合する性能を誇ります。

## Japanese Translation: Cognition は、Fable 5.1 や GPT-5.6 Sol といったトップクラス競合に匹敵する最新コーディングモデルである SWE-2 を発表しました。SWE-2 は、大規模な Kimi K3 ベースモデル(パラメータ数 2.8 兆)での後学習により実現され、コストペナルティ付き報酬とファーストプリンシプルに基づくアプローチ、そして長さに基づく報酬ベースラインを採用してトレーニングを安定化させながら、多兆パラメータ領域への強化学習のスケーリングを達成しました。FrontierCode 1.1 Main では 50.0% のスコア(Fable 5.1 より僅か 1 ポイント下)を記録しながらコストは 64% 削減され、DeepSWE 1.1 では 73.0% を達成しました。単なるスコアを超え、SWE-2 は「エンジニアリング的判断」の優位性も示し、不要な迂回を避けることで初期コードエディットの中央値ステップ数を 48 から 18 に削減しました。また、モデルは安全性と信頼性を最優先しており、プロパガンダおよび検閲テストのうち 98% をパスしています。Devin Desktop と CLI 経由で即時利用可能(Web および Fusion では段階的展開中)の SWE-2 は、高パフォーマンス AI をアクセス可能な価格点で提供し、信頼性や安定性を損なうことなくソフトウェア開発サイクルの効率化を目的としています。 ## Text to translate: Cognition has introduced SWE-2, its most advanced coding model, which rivals top competitors like Fable 5.1 and GPT-5.6 Sol while offering significant efficiency gains. Achieved through post-training on the massive 2.8 trillion-parameter Kimi K3 base model, SWE-2 scales Reinforcement Learning to a multi-trillion parameter regime using cost-penalized rewards derived from first principles and a length-weighted reward baseline to stabilize training. On FrontierCode 1.1 Main, it scores 50.0% (just one point behind Fable 5.1) while being 64% cheaper; on DeepSWE 1.1, it achieves 73.0%. Beyond raw scores, SWE-2 demonstrates superior "engineering judgment," reducing the median steps to an initial code edit from 48 down to 18 by avoiding unnecessary detours. The model also prioritizes safety and reliability, passing 98% of propaganda and censorship tests. Available immediately via Devin Desktop and CLI (with rolling deployments on Web and Fusion), SWE-2 is designed to streamline software development cycles by delivering high-performance AI at an accessible price point without compromising trustworthiness or stability.

2026/09/11 6:30

米運輸安全委員会、マイアミでのボーイング767滑走路逸脱事故調査結果更新発表

## Japanese Translation: 9月6日のマイアミ国際空港におけるランウェイ逸脱事故に巻き込まれたボーイング7598貨物機からフライトレコーダーが回収され、正常に読み出されたことが、2026年9月9日に国立輸送安全委員会(NTSB)によって確認されました。アクロン航空社(Acron Aviation)のCVRからの高品質な音声および54時間以上にも及ぶフライトデータレコーダーのデータ——400以上のパラメータを記録——が確保されました。予備的分析によると、飛行機は conflicting なパイロットによる離陸再行(ゴーアラウンド)指令を受けながら、危険に甚だしい速度(ノーズギア158ノット)で接地しており、スピードブレーキやスラストリバーサの展開はされていなかったとのことです。現時点での記録は同期されていませんが、ワシントンDCのNTSBチームによって書面による要約が作成され、フラップ調整、オートパイロットの離脱、地形警告など特定の行動を含む事件の経過を明確にします。詳細なコックピット会話とデータパラメータのタイムラインは、専用調査ウェブページで確認できます。あるいは24時間365日の対応オペレーションセンター(1-844-373-9922)にお問い合わせいただくことも可能です。すべての所見は、公式要約が確定するまで予備的なものとされています。

2026/09/11 0:29

火星用に開発されたNASAの色彩トリックが、今や地球で岩壁画を解読する役割を果たすことになった

## Japanese Translation: 考古学者のジョン・ハーマンは、NASA の decorrelation stretch 手法を応用して古代岩絵の研究を行ないました。この手法は当初、JPL で 1978 年にジム・ソーハによってリモートセンシング画像の強化のために開発され、後にロナルド・アレイによって速度と精度の向上を目的として 1996 年に改良されました。ハーマンはこの研究成果に基づき、数学および医療イメージングの背景を応用し、Karhunen–Loève 変換定理に基づく Dstretch プラグインを開発しました。このソフトウェアは単なるコントラストの引き上げではなく、色彩を拡張された範囲へマッピングします。Dstretch を用いることで、研究者たちは複数の遺跡において以前は目に見えなかった図像を発見しました:カリフォルニア州バイアのカベ・デ・サン・ボルヒタスで新たな黄色の図像が確認され、カンボジアのアングルワット周辺で 200 点以上の色あせた絵画が発見されています。エジプトのベニハッサンではコウモリや豚の画像が、カナダ・アルバーツアのライティングオンストーン州立公園ではクロ族の戦士による初期のグラフィティと解釈される馬と騎士を描いたピクトグラフが、ノルウェーのアールサンド 1 遺跡では新たに約 15 点の図像に加え、28 点で新たな詳細が浮き彫りになりました。このプラグインのカスタムカラー空間は岩絵のイメージングに特に有用であることが実証されています。火星イメージングの強化に元々使用された既確立のリモートセンシング手法を適用することで、Dstretch は低コントラストの写真に対して侵襲のないデジタルアクセスを提供し、世界中の隠れた芸術作品の解明に貢献しています。