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