如何實現我們在Scheme中的(local ...)
語法中定義的變量? 例如,在下面這段代碼,在Scheme環境中實現本地語法中的變量
(define (erkan x)
(local
((define y 10))
(* x y)))
我怎麼能直接拿到y的值?
如何實現我們在Scheme中的(local ...)
語法中定義的變量? 例如,在下面這段代碼,在Scheme環境中實現本地語法中的變量
(define (erkan x)
(local
((define y 10))
(* x y)))
我怎麼能直接拿到y的值?
要麼這是一個奇怪的問題,或者你沒有句話是正確的......你的代碼示例使用y
,所以它可以訪問它。也許你正在試圖獲得的y
只值:
(define (erkan x) (local [(define y 10)] y))
或者,也許你想創造一種「對象的事」 - 這是可能的,但涉及到更先進的代碼。下面是一個簡單的例子,只是爲了告訴你它是如何完成的(但如果你正在通過HtDP,最好稍後再離開)。
(define (erkan x)
(local [(define y 10)
(define (handler message)
(cond
[(eq? message 'get-x) x]
[(eq? message 'get-y) y]
[(eq? message 'compute) (* x y)]
[else (error "bad message")]))]
handler))
(define some-erkan (erkan 3))
(some-erkan 'get-x)
(some-erkan 'get-y)
(some-erkan 'compute)
(注順便說一句,這是不妥當的方案,但在HTDP使用的教學學生的方言。)
是的,學習HtDP。 當我打電話(erkan 3)時,結果是(lambda(a1)...)在DrScheme中。這很有趣(: 這種方法的名字是什麼?也許我可以從這本書看它 – erkangur 2010-07-12 23:53:27
這是最好的,只是隨書一起順序 - 它也將涵蓋一些更先進的東西,並且以某種方式比一些隨機的代碼更容易理解...... – 2010-07-13 00:05:49
你是訪問y
當你在做(* x y)
。
如果您想從local
-block外部訪問y
,則不能這樣做。 local
- 塊中的任何定義對於該塊都是本地的,並且不能從外部訪問。
我不明白你的問題。你在那裏得到'y'的值 - 這就是'x'乘以10的方式。你的意思是你想要在函數之外訪問'y'嗎? – Chuck 2010-07-12 23:38:43
是的,確切地說。我想在功能外使用y- 編輯:得到了答案。我錯過了這個概念,畢竟它是「本地的」。 :P – erkangur 2010-07-12 23:42:21