1

(local ...)Schemeの構文で定義した変数をどのように実現できますか? たとえば、以下のコードでは、

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

y の値を直接取得するにはどうすればよいですか?

4

2 に答える 2

2

をしているyときにアクセスしています(* x y)

y-blockの外からアクセスしたい場合local: それはできません。-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 に答える