在方案中,您可以定義返回lambda表達式並使用它們來定義新函數的函數。例如,你可以這樣寫代碼函數求值爲lambda不能用於定義範圍內的新函數
(define (pow-iter base exp r)
(if (= exp 1)
r
(pow-iter base (- exp 1) (* base r))))
(define (pow exp)
(lambda (base)
(pow-iter base exp base)))
(define cubic (pow 3))
(cubic 2)
我們這裏有一個功能pow
這需要指數作爲參數,計算結果爲求值爲定基本的n次方lambda函數。
但是,如果我們把像這樣一個範圍內:
(define (do-cubic x)
(define (pow-iter base exp r)
(if (= exp 1)
r
(pow-iter base (- exp 1) (* base r))))
(define (pow exp)
(lambda (base)
(pow-iter base exp base)))
(define cubic (pow 3))
(cubic x))
(do-cubic 2)
我得到一個錯誤
pow: undefined; cannot use before initialization
爲什麼會出現這種錯誤發生,有沒有什麼辦法解決它在不改變程序的邏輯?
球拍的詳細信息我噸工作。 – Renzo
@Renzo你的意思是它在'#!racket'中有效。在'#!r5rs'中,即使在RacketVM下,它也會失敗。他們是不同的語言。 – Sylwester