--------------使用方法------------------- プログラムを実行すると入力を求めてくるので、 ラムダ項を入力するとその正規形を返してくれる。 ただし (lambda x . x x)(lambda x . x x) など正規形がないラムダ項については、途中でメモリ不足により終了する。 ラムダ項は以下のように入力することにする. また入力の終わりを表す文字としてセミコロンを用いる 変数 x はそのまま x で表す. M,N :ラムダ項の時(MN)は (M N) で表す (lambda x.M) は (lambda x . M) で表す ただしこのプログラムでは省略記法が使えて (lambda x . (lambda y . (lambda z .M))) は (lambda x y z . M) とする事ができる. また括弧を適当に省略することができる. つまり入力は一般的なラムダ項の省略記法そのままの形で入力する事ができる. 例えば (lambda xyz.xz(yz))(lambda xy.x)(lambda xy.x) の正規形を 求めるときは以下のように入力する >(lambda x y z . x z (y z))(lambda x y . x)(lambda x y . x); -------------------------------------------------------------- -------------ラムダ項を名前を使って定義する-------------------- 入力のところで >define Name lambda-term; と入力する事により以後 Name(Name の最初の文字は大文字とする) を lambda-term に置き換えるようにできる.つまり >define K lambda x y . x; とすれば以後 K は lambda x y . x として扱われる またK を lambda x y . y に換えたい場合は >define K lambda x y . y; としてやればよい。 ただしこのシステムでは I,KP,BP,CP,SP の5つの名前を基本定数として 扱っているためにこれらの名前は用いることはできない (変更しようとするとエラーメッセージがでる) ----------------------------------------------------------------- --------------直接求める方法も同時に行うようにする--------------- 入力待ちの時に >modechange と入力する事により直接求める方法も行うようになる、解除するにはもう一度 >modechange と入力すればよい. ------------------------------------------------------------------