﻿

                  Lambda * Magica      ver 3.00

      Simple Untyped Lambda Calculus Interpreter for Education


1. 概要
  単純型無しラムダ計算のインタプリタ


2. 基本
    M ::= \x.M    - ラムダ抽象 (λ-abstraction)
        | M M     - 適用 (application)
        | x       - 変数
        | <m>     - マクロ（拡張構文）

  変数名は英字1文字 (A-Z, a-z) のみからなる。
  したがって、束縛変数や適用で変数を並べるときは空白等で区切る必要はない。

  束縛変数として既に束縛されている変数名を使用することはできるが、その場合既に束縛されていた変数は
  隠される (shadowing)。
  つまり、\x.(\x.x) という式は \x.(\y.y) を意味し、\y.(\x.y) という解釈はありえない。

  ラムダ記号はλの代わりに半角バックスラッシュ記号 (\) を用いる。
  フォントによっては円記号に見えるが、問題はない。
  \x.\y.xy というラムダ抽象は \xy.xy と略記することができる。

  適用は左結合である。つまり、xyz という式は (xy)z という式と同値である。

  インタプリタで

    id = \x.x

  のように入力することでマクロを定義することができる。
  以降、ラムダ式中で (\x.x) の代わりに <id> と書くことができる。
  例えば、(\y.yy)<id> というラムダ式は

    (\y.yy)<id> --> <id><id>
                --> (\x.x)<id>
                --> <id>
                --> (\x.x)

  というように簡約される。

  付属の prelude.lm.txt にはラムダ計算でよく出てくる基本的な式が定義されている。
  これはインタプリタで :l prelude と入力すると読み込むことができる。


3. システムコマンド
  インタプリタ組み込みのコマンド。半角コロン記号 (:) に続けて指定する。

    :?            - コマンドヘルプを表示する
    :f <expr>     - 式中のマクロをすべて展開して表示する（簡約は行わない）
    :l <name>     - ファイルからマクロ定義を読み込む
    :l            - カレントディレクトリ内の *.lm.txt ファイルを読み込む
    :s <n>        - 連続ステップ数を設定する
    :s            - 現在の連続ステップ数を表示する
    :t (on|off)   - トレースモードを設定する
    :t            - 現在のトレースモードの設定を表示する
    :m            - 定義されたマクロ名とその定義式を表示する
    :clear        - マクロ定義を消去する
    :pwd          - カレントディレクトリのパスを表示する
    :short        - 短縮表示モードを切り替える
    :conv         - データ変換表示モードを切り替える
    :q            - インタプリタを終了する


4. バージョン情報
- ver 3.00 (November 15, 2012)
  大幅にメンテナンス、修正、改善

- ver 2.40 (November 3, 2011)
  :l コマンドでファイルが読み込まれなかったバグを（多分）修正
  特定の条件下でマクロが展開されず簡約が停止するバグを修正
  システムコマンドの追加

- ver 2.35
  最初
