ソースはこちら。
https://github.com/takeisa/LispInCommonLisp
350行程度になった。
letはまだ実装していない。
言語処理系を実装するのは楽しいなー。
動作例
※evalで評価する式をデバッグ出力している。
フィボナッチ数を求める関数を定義する。
CL-USER> (repl) LISP> (define (fibonacci n) (if (<= n 1) n (+ (fibonacci (- n 2)) (fibonacci (- n 1))))) make-lamba parameters: (N) make-lamba body: ((IF (<= N 1) N (+ (FIBONACCI (- N 2)) (FIBONACCI (- N 1))))) lambda: (LAMBDA ((N) (IF (<= N 1) N (+ (FIBONACCI (- N 2)) (FIBONACCI (- N 1)))))) lambda parameters: (N) lambda body: ((IF (<= N 1) N (+ (FIBONACCI (- N 2)) (FIBONACCI (- N 1))))) OK
20番目のフィボナッチ数を求める。
LISP> (fibonacci 10) t-eval: (FIBONACCI 10) t-eval: FIBONACCI t-eval: 10 t-eval: (IF (<= N 1) N (+ (FIBONACCI (- N 2)) (FIBONACCI (- N 1)))) t-eval: (<= N 1) t-eval: <= t-eval: N t-eval: 1 ..snip.. 6765
0 件のコメント:
コメントを投稿