05/05/31 21:56:57
URLリンク(i.loveruby.net)
上のページの Y-Combinator を,練習を兼ねて Common Lisp に移植してみました.
(setf (symbol-function 'Y)
#'(lambda (f)
((lambda (proc)
(funcall f #'(lambda (arg) (funcall (funcall proc proc) arg))))
#'(lambda (proc)
(funcall f #'(lambda (arg) (funcall (funcall proc proc) arg)))))))
(setf (symbol-function 'fact0)
#'(lambda (f)
#'(lambda (n)
(if (zerop n)
1
(* n (funcall f (- n 1)))))))
(funcall (Y #'fact0) 5) => 120
...やっぱり大変だ,これ.もっといい書き方はないものでしょうか.