タグ

2008年2月24日のブックマーク (1件)

  • Yコンビネータ復習 - 遠い海

    前にCommonLispで書いてみたんだけど、もう全然覚えてない。 書き方もひどいな。こりゃ。 というわけでもう一度やり直してみた。 今度はもう少し詳しく書く(つもり) 使ったのはallegro common lisp。 Yコンビネータができるまで (if (zerop n) 0 (+ n (fun (1- n))))) こんな再帰関数があったとする 呼び出すとこうなる。 cl-user> (fun 3) 6 まずこの関数から (defun fun (n) (if (zerop n) 0 (+ n (fun (1- n))))) この中のfunを消したい。 引数としてここで呼び出す関数を受け取るように変えて、その引数をfuncallすればソースコード上からfunの呼び出しが消える。 (defun fun (rcf) (lambda (n) (if (zerop n) 0 (+ n (fun

    Yコンビネータ復習 - 遠い海