如何实现我们在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