﻿

                  Lambda * Magica      ver 3.60

         Untyped Lambda Calculus Interpreter for Education

        Copyright (C) 2011-2012 Yuuki.S All Rights Reserved.


1. 概要

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

1.1 実行方法

  - Windows
      run.bat を実行（または lm.jar を直接実行）

  - Linux/Mac
      run.sh を実行（または lm.jar を直接実行）

1.2 CUIモード（旧版）の起動

  次のコマンドにより実行すると、CUIインタプリタを起動することができる。

    $ java -cp lm.jar lambda.Main


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.60 (November 23, 2012)
  GUIモードの整備、デフォルトでGUIを起動するように
  フォントサイズ変更機能を実装
  行入力履歴を実装
  オートモードにおけるスタックオーバーフロー（計算の発散）を処理

- ver 3.50 (November 21, 2012)
  GUIモードをおおまかに実装、大体動く程度に
  簡約基の表示と選択を実装、オートモードの実装
  readme改訂

- ver 3.00 (November 15, 2012)
  大幅にメンテナンス、修正、改善

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

- ver 2.35
  最初
