2014-01-05 222 views
1

我對lisp很新,所以請耐心等待。下面的代碼是什麼我「想」是第一個通過函數的方式嘗試,但它似乎是別的東西:通過Lisp傳遞函數

(defun hello-world() (format t "hello, world!"))          
(defun ll (x y) (+ (* 3 y)x)) 
(defun zz(x)(funcall(λ(x)x)x)) 
>(zz (hello-world)) 
>hello, world!NIL 
>(zz (ll 3 4)) 
>15 
>(zz 8) 
>8 

我的問題(S): 這是一個身份的功能?如果不是,爲什麼?最後,爲什麼lambda表達式需要最後一個(x)?任何規範的源材料將不勝感激。謝謝。

回答

2

讓我嘗試一步

(lambda (x) x) 

來分析你的代碼一步這是一個函數,它接受一個參數,結合可變x它,並返回x,即身份的功能。

(funcall (lambda (x) x) x) 

這要求在參數x(無關表達式中的前兩個x的)上述恆等函數,所以這是一樣的x

(defun zz (x) (funcall (lambda (x) x) x)) 

這定義了一個新函數zz,如上所述,它是身份函數。

看看你的函數返回的值調用,例如:

(zz (hello-world)) 
hello, world!NIL 

hello-world打印 「你好,世界!」並且返回NIL,其被傳遞給zz,其反過來返回其參數完整的爲NIL

+0

是的!非常感謝!我真的需要第二雙眼睛(而我的lambda微積分還不是很好......)。至少現在我覺得我已經取得了一些進展! – macrolyte