[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:02495] Re: Common の質問



Cakeさん、こんにちは。

    Mon, 10 May 1999 06:09:59 +0900 の
   “[xyzzy:02491] Common の質問”
    への返事です.

| Common Lisp で、再帰するラムダ式ってどう書けばいいのでしょうか。

真っ当な答えは既に出ているので、ひねくれたやつを(^^;
Y combinator ってのがありまして、こいつを使うと名無し
関数の再帰呼び出しができます。これは Common に限らず、
クロージャがある言語(いわゆる関数型言語全般)では一般的
な手法(らしい)です。

(defun my-sum (&rest arg)
  (funcall ((lambda (y)
	      ((lambda (f) (funcall y #'(lambda (x) (funcall (funcall f f) x))))
	       #'(lambda (f) (funcall y #'(lambda (x) (funcall (funcall f f) x))))))
	    #'(lambda (sum)
		#'(lambda (L)
		    (if (null L)
			0
		      (+ (car L) (funcall sum (cdr L)))))))
	   arg))

--
亀井哲弥(Tetsuya Kamei)
kamei@xxxxxxxxxxxx/JCA00343@xxxxxxxxxxx

Index Home