(local ...)
Schemeの構文で定義した変数をどのように実現できますか? たとえば、以下のコードでは、
(define (erkan x)
(local
((define y 10))
(* x y)))
y の値を直接取得するにはどうすればよいですか?
(local ...)
Schemeの構文で定義した変数をどのように実現できますか? たとえば、以下のコードでは、
(define (erkan x)
(local
((define y 10))
(* x y)))
y の値を直接取得するにはどうすればよいですか?
をしているy
ときにアクセスしています(* x y)
。
y
-blockの外からアクセスしたい場合local
: それはできません。-block内で作成された定義は、local
そのブロックに対してローカルであり、外部からアクセスすることはできません。
これは奇妙な質問であるか、正しく表現していません...サンプルコードは を使用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 で使用される教育学生の方言であることに注意してください。)