1

我们如何实现我们(local ...)在 Scheme 语法中定义的变量?例如在下面的这段代码中,

(define (erkan x)
   (local 
      ((define y 10))
      (* x y)))

如何直接获取 y 的值?

4

2 回答 2

2

当你在做的时候你正在访问。y(* x y)

如果您想ylocal-block 外部访问:您不能这样做。在 -block内进行的任何定义都是该local块的本地定义,不能从外部访问。

于 2010-07-12T23:40:20.533 回答
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)

(注意顺便说一句,这不是正确的方案,而是 HtDP 中使用的教学学生方言。)

于 2010-07-12T23:41:43.027 回答