1
我看到之前有类似的问题,但我不明白这里的另一个问题。方案 - 使用let的函数
这里有两个功能:
(define x 2)
(define a 2)
(define goo
(lambda (x)
(display x)
(lambda (y) (/ x y))))
(define foo
(let ((f (goo a)))
(lambda (x)
(if (= x 0)
x
(f x)))))
什么是(foo (foo 0))
的返回值?什么会打印到屏幕上?
据我了解,当我在开始运行(foo 0)
,2
将打印出来(我们将进入功能goo
),并且返回值将是0
。然后,我们将再次输入foo
的功能(foo (foo 0))
=>(foo 0)
。我们再次输入功能goo
和2
将打印出来。但是当我运行它时,2
只被打印一次。我想我错过了关于let
及其与lambda
的连接的关键问题。
Tank u。但“let”的正文是: (lambda(x) (if(= x 0) x (f x))) 含义 - 我必须在每次评估“foo”时输入let。因此,我也输入了“goo”功能(重新定义)。 我缺少什么? – Tom 2011-04-23 15:38:16
当x不为零时,再次评估f;但f是foo定义时评估(goo a)的结果; f已经绑定,每次执行foo时都不会反弹。 – 2011-04-23 15:52:58
看到我的编辑上面的例子,可能会帮助你。 – 2011-04-23 16:03:44