2014-01-05 176 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