DOS 用の Schemy Lisp

2026/09/06 21:58

DOS 用の Schemy Lisp

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

要約

Japanese Translation:

SLED(Schemy Lisp en DOS)は、Scheme を灵感とする記号 Lisp 方言であり、元々は Kilo LISP から派生したもので、マクロ機能を強化されたものです。本システムは、レガシーな DOS システム(FreeDOS、MS-DOS など)および DOSBox-X、DOSBox-Staging、DOSBox などの現代的なエミュレータに特化して設計されており、現代のオペレーティングシステムを必要とせずにアンティークハードウェアやコンシューマーマシン上で実行可能となります。SLED は S 式表現をデータとコードの両方として扱い、数字には tally numeral を、

lambda
クロージャを用い、
let
if
cons
などの特定の形式に対して eager evaluation と tail-call 最適化を実装しています。動作は厳格な制約の下で行われ、固定されたヒープ制限(ノード数 12288)、シンボルテーブル容量(文字数 2048)、DOS の 8.3 ファイル命名規則への準拠(例:スクリプト用
.scm
拡張子)が適用されます。プログラミングにはリポジトリから取得されたコンパイル済みバイナリとソースコードをサポートしており、組み込み関数、標準関数とは区別される特殊形式、不変のコアを備えています。ユーザはコマンドラインよりソースファイルをロードし、バッチモード(
/B
)やエラー無視実行(
/I
)などのオプションを利用でき、
(exit)
で終了させ、エラー発生時に式内部で捕捉されずトップレベルにジャンプするエラー処理を行います。コメントはセミコロン(
;
)で示し、ブロックコメントは括弧の一致を要求します。

本文

Schemy Lisp en DOS (SLED) 日本語版ガイド

概要

SLED (Schemy Lisp en DOS) は、Scheme の機能を基盤とした純粋な記号的 LISt プロセッサです。優れた Kilo LISP を源流としつつ、マクロなどの機能は削減しつつも他の機能を強化した「Ur-Lisp」に分類されます。

  • 動作環境: FreeDOS や MS-DOS などの DOS 上で動作します。
  • エミュレーター対応: DOSBox, DOSBox-X, DOSBox-Staging などに対応しています。
  • 入手方法: リリースダウンロード(コンパイル済みバイナリ)、ソースコードリポジトリ、バックアップリポジトリが用意されています。

データ型と構造

SLED では2 つの基本的なデータ型が存在します:ペアと**非ペア(アトム)**です。

記号 (Symbol)

一意の名称であり、以下の文字を最大 16 個組み合わせることができます。

  • 使用可能な文字:
    a
    z
    ,
    0
    9
    ,
    -
    ,
    .
    ,
    ?
    ,
    _
  • 制約: 先頭文字として「.` (ドット) を使用することはできません。
  • エスケープ: バックスラッシュ
    \
    を用いて、任意の可印 ASCII 文字(
    ( ) ' $
    を除く)を記号に含めることができます。
    ; 例:括弧を含む記号
    This\ is\ sym\!
    
  • ケース: 大文字と小文字を受け入れ、エスケープされていない場合は小文字に変換されます。

クオート (Quote)

「評価しない」意味を持ち、データ宣言に使用されます。

  • 標準構文:
    (quote sym)
    
  • 簡略構文:
    'sym
    

ペア (Pair)

ヘッドとテールを持ち、それぞれアトムまたは別のペアを保持します。要素は不変です。

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

リスト (List)

テールが別のペアを指し、最後のものは

nil
(空リスト)である構造です。

  • :
    • nil
      ,
      '()
      ,
      '(a . nil)
      ,
      '(a . (b . nil))
  • 作成方法:
    '(a b)          ; 簡易構文
    (list 'a 'b)    ; 標準ライブラリ関数
    

不適切なリスト (Improper List)

nil
で終わらず、ペアのテールが別の記号などの非リスト構造になっているものです。

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

アソシエイションリスト

キーと値のペアの序列です。

((a . x) (b . y) (c . z))
; キー: a, b, c ... / テール (値): x, y, z ...

数値 (Natural Numbers)

システム固有の数値型はありませんが、リストを用いて**自然数(非負整数)**をシミュレートできます(Tally Numerals)。

  • :
    • '()
      ; ゼロ
    • '(nil)
      ; 一
    • '(nil nil)
      ; 二
    • '(nil nil nil)
      ; 三
  • 操作関数:
    inc
    ,
    dec
    ,
    zero?
    を使用します。

S-式 (S-expression)

「アトムまたは S-式のペア」から定義されるデータ構造です。ソースコードとしても、データとしても機能します。


コードと評価

LISP において、クオートされていないデータはコードとして評価されます。

基本要素

  1. バインディング:
    define
    を用いて記号をデータにリンクします。
    (define a 'x)
    
  2. クロージャ:
    lambda
    で関数と環境を作成します。
    (define fun (lambda (arg1 arg2) 
                   (print arg1) 
                   (print arg2)))
    
  3. 関数の適用: クオートされていないリストの頭が関数、残りが引数とみなされます。
    ; 厳密(eager)評価:まず引数を評価し、次に適用する
    (fun arg1 arg2)
    

引数の受け取り方

関数のパラメータはリストとして渡され、以下の方法で処理可能です。

  • (lambda x ...)
    ;
    x
    はリスト全体
  • (lambda (x y) ...)
    ; リストの先頭 2 つ要素を分解
  • (lambda (x y . z) ...)
    ;
    z
    は残りのリスト(デフォルト nil)

再帰とスタック管理

LISP は再帰に頼ります。SLED は以下の機能で深層再帰時のスタックオーバーフローを防ぎます。

  • トランポリン評価子 (Trampoline Evaluator): 再帰的な呼び出しを非再帰的に処理します。
  • 尾再帰最適化 (TCO):
    • lambda
      ,
      let
      ,
      begin
      ,
      if
      ,
      ifnil
      ,
      apply
      で機能します。
    • 第 2 引数に再帰が行う場合は
      cons
      でも機能します。

エラー処理

  • エラー発生時はトップレベルに戻ります。
  • 式内部でのエラーキャッチはできません(トップレベルのみ検出可能)。

特殊形式と関数

  • 特殊形式:
    if
    など、引数を全て評価しない形式です。関数とは動作が異なります。
  • 組み込み関数: システム連携用機能。
  • 標準ライブラリ:
    sled.scm
    に実装されており、カスタム定義を拡張可能です。
  • 不変性: 特殊記号、特殊形式、組み込み関数、標準ライブラリの内容は変更・シャドウ化できません。

システムと実行環境

ファイル命名規則

  • DOS 8.3 形式に従う必要があります(ファイル名 8 文字 + ドット + 拡張子 3 文字)。
  • スクリプトには
    .scm
    を推奨します(Scheme と構文が似ているため)。
  • インタープリタは拡張子を厳密にチェックしません。

起動時の動作

  1. まず標準ライブラリ (
    sled.scm
    ) を読み込みます。
  2. 読み込まれる記号と値は不変となります。
  3. その後、REPL (Read-Eval-Print Loop) が開始されます。
sled>

コマンドライン引数

以下の 4 つの選択肢があります(最後の引数がファイルパス)。

引数説明
/?
ヘルプページを表示
C:\> sled /?
(省略)標準ライブラリ読み込み後、REPL を開始
C:\> sled code.scm
/B
バッチモード: スクリプト実行後に終了
C:\> sled /B code.scm
/I
エラー無視モード: エラー後も実行を続行
C:\> sled /I code.scm

ファイルパスのエスケープ

  • パス内のバックスラッシュ
    \
    はエスケープする必要があります(記号文字として許容されないため)。
    ; コマンドライン
    C:\> sled to\my\code.scm
    
    ; 内部での読み込み処理 (load)
    (load 'to\\my\\code.scm)
    
  • ファイルパスも 16 文字の制限があります。

REPL と拡張文字

  • 方向キー: 「α」などの拡張文字が表示されることがあります。これらは入力ストリームを汚染し、エラーの原因となりますので避けてください。
  • 終了方法:
    1. トップレベルで
      $
      を入力(パーサーが終了指示)。
      sled> $
      
    2. 組み込み関数
      (exit)
      を評価する。
      (exit)
      

コメントと制御

  • 行コメント:
    ;
    で開始。次の行までの無視。
    ; メンテナンス用コード
    ;; 再定義禁止領域
    ;; 注意:重要な設定です
    
  • ブロックコメント:
    comment
    特殊形式を使用。括弧のバランスが必要。
    (comment ())   ; OK
    ; '(comment test)  ; エラー(クオート不可)
    
  • 中断/終了:
    • 入力を中断:
      CTRL+C
    • 計算を終了:
      CTRL+Break

ヘルプ表示

REPL で

?
を入力すると、特殊形式や組み込み関数のリストを表示できます。


リストと数値の制限事項 (Real Mode DOS)

DOS アプリケーションとしての制約があります。

  • ヒープサイズ: 最大 12,288 ノード
  • 記号テーブル: 最大 2,048 文字
  • 標準ライブラリ: 約 5% の資源を消費します。

インデックスと辞書

特殊形式

  • define
    ,
    lambda
    ,
    let
    ,
    if
    ,
    ifnil
    ,
    apply
    ,
    load
    ,
    comment
    など。

組み込み関数 (ビナリー・ユニ ary)

  • 論理:
    • and?
      : 両方が真か(バイナリ)。
    • or?
      : 少なくとも一つが真か(バイナリ)。
    • not
      : 否定(
      empty?
      のエイリアス)。
  • リスト操作:
    • cons
      : 新規ペア作成。
    • tail
      : 後続要素取得(古典的 LISP の
      cdr
      に相当)。
    • append
      : リスト連結。
    • reverse
      : リスト反転。
    • list
      ,
      map
      ,
      member
      ,
      get
      ,
      put
      ,
      value
  • 制御:
    • begin
      : 順次評価。
    • ifnil
      : 条件分岐(nil かどうか)。
    • error
      : エラー発生 (
      err
      ステータスへ)。
    • restart
      : インタープリタ再起動(定義全削除)。

述語・サンク・エイリアス

  • 型判定:
    • symbol?
      ,
      atom?
      ,
      list?
      ,
      pair?
      ,
      defined?
    • true
      ,
      nil
      : 真理値用。
  • 数値判定:
    • zero?
      ,
      inc
      ,
      dec
      : Tally 数操作。
  • 比較:
    • equal?
      : 再帰的等価性(構文等価)。
    • equiv?
      : アトム間・浅い等価性(内容等価)。
  • ファイル:
    • eof?
      ,
      read
      : 読み込み操作。

特殊記号と定数

  • $
    : REPL 終了。
  • ?
    : ヘルプ表示。
  • '
    : クオート。
  • _
    : 空白文字。
  • ans
    : トップレベル結果。
  • err
    : エラー状態フラグ。
  • nil
    ,
    true
    : 真理値。
  • ver
    : バージョン情報。

ビルドと実行

環境要件

ビルドには Microsoft C コンパイラ または Open Watcom、および make が必要です。

ビルドコマンド

コンパイル器の場所(

MSC
または
OWC
)を指定して以下のコマンドを実行します。

  • MS C 6.0A でビルド:
    make build_msc
    
  • Open Watcom v2 でビルド:
    make build_owc
    

実行テスト

  • ビルド実行確認:
    make run
  • テストスイート実行:
    make tests
  • ベンチマーク実行 (Takeuchi 関数):
    make bench

プラットフォームごとの使用方法

SLED は主に DOS 環境向けですが、他の OS では以下の方法で利用可能です。

環境実行方法
FreeDOS / MS-DOSバイナリを直接起動します。
Linux, BSD, MacOS, Unixシェルスクリプト
./sled.sh
を実行(自動で DOSBox が選択されます)。
エミュレーターDOSBox, DOSBox-X, DOSBox-Staging 上で動作します。

ライセンス

このプロジェクトは 0BSD (ゼロ条項 BSD) ライセンスの下で公開されています。

リンク先情報

  • Kilo LISP(源流)
  • PC Scheme(関連項目)
  • DOS 向けのマイクロコンピュータ用 LISP インタープリタ比較

同じ日のほかのニュース

一覧に戻る →

2026/09/08 3:52

ロサンゼルスが一つ一つのビル建設を通じて発展していく姿を見てください(1880 年~2026 年)

## Japanese Translation: 本テキストは、ロサンゼルス独自の視覚マップを説明している。既存の構造物それぞれが建設年によって配置された一つの箱として表現されており、現在も存続している建物のみが含まれ、取り壊されたものは除外されている。その結果、この可視化は都市の歴史的景観や完全なタイムラインではなく、現在の建築環境を示している。これは生存する建築への明確な年代的概要を提供する一方で、過去の構造物や将来の開発については洞察を与えず、ロサンゼルの進化を現在にのみ焦点を当てており不完全な画像として提示する。 ## Text to translate : This text describes a unique visual map of Los Angeles where each existing structure is shown as one box arranged by its construction year. Only buildings still standing today are included; those that have been demolished are excluded. As a result, the visualization shows the current built environment rather than the city's historical appearance or full timeline. While it provides a clear chronological overview of surviving architecture, it offers no insight into former structures or future developments, presenting an incomplete picture of Los Angeles's evolution by focusing solely on the present.

2026/09/05 20:25

Linux ディストリビューション全体に対する信頼を誤用した攻撃 (Trust-Trust Attack)

## Japanese Translation: Ken Thompson の「信頼の連鎖」攻撃は、以前はコンパイラレベルでの改ざんが必要とされていたものが、GNU strip 内でも実行可能であることを実証した。本研究では、GNU strip が完成済みの ELF ファイルを改変することで、ソースコードを確認せず・改変せずにも、Linux 全体のビルド環境に永続的なバックドアを埋め込むことを示している。NixOS のブートストラッププロセスにおいて、バイナリシードに含まれる GNU strip の単一のパッチ済みバージョンによってペイロードが挿入され、それが次のビルド世代へと伝播し、シードが依存関係の閉じ外に出た後の最終的な標準環境においても存続する。実際の nixpkgs リビジョンにおいて、この攻撃は障害なく完全なグラフィカルインストールメディアを構築でき、任意の悪意のある挙動を行う汚染されたバイナリを生み出した。この発見は、NixOS のような不変系ディストリビューションに依存するユーザーや組織に対し、一見安全なツールが大規模な侵害の主要なベクトルとなるリスクを提起している。この研究成果は Aman Sharma(メール:[メールを表示])によって提出され、UTC 2026 年 7 月 27 日 12:59:15 に投稿された(バージョン 1)。

2026/09/04 1:06

WeatherNext 3

## 日本語翻訳: ## サマリー:Google は、年間毎日ごとに正確な時間ごとの予報を生成する、これまで最も高度な全球気象 AI モデル「WeatherNext 3」をローンチしました。以前のモデルとは異なり、本モデルは生きた衛星画像を直接分析することで、降雨や降雪といった急速な変化を追跡し、トレーニングが施されたことのない場所であっても精密なローカルデータを提供します。この機能は、ジャマイカでのハリケーンメリサの上陸地点を特定して予測することを支援するなど、最近のイベントにおいて極めて重要であることを実証しました。Google Search、Maps、Gemini などの日常的な消費者向け利用に加え、WeatherNext 3 は風力発電所や太陽光発電所向けの放射線量および雲量予測という重要な産業用途に最適化されています。これにより、運営者は運用コストを削減しながら再生可能エネルギー源をより効率的に管理できるようになります。また、温度などの地表変数を 5km〜10km の高精度で予測することで、インフラがより信頼性高く動作するよう確保するとともに、ユーザーには日々の意思決定を賢く行うための精密なローカルデータを提供します。