我们如何实现我们在Scheme中(local ...)
语法中定义的变量?
例如,在下面的代码中,
(define (erkan x)
(local
((define y 10))
(* x y)))
如何直接获取y的值?
答案 0 :(得分:2)
当您y
时,正访问(* x y)
。
如果您想从y
块之外访问local
:您无法执行此操作。在local
- 块内所做的任何定义都是该块的本地定义,不能从外部访问。
答案 1 :(得分:1)
这是一个奇怪的问题,或者您没有说出正确的答案......您的示例代码使用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)
(注意BTW,这不是正确的方案,而是在HtDP中使用的教学方言。)