Достижение переменных в локальном синтаксисе в среде Scheme - PullRequest
1 голос
/ 13 июля 2010

Как мы можем достичь переменных, которые мы определили в синтаксисе (local ...) в Схеме? Например, в этом коде ниже,

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

Как я могу напрямую получить значение у?

Ответы [ 2 ]

2 голосов
/ 13 июля 2010

Вы обращаетесь к y, когда делаете (* x y).

Если вы хотите получить доступ к y из-за границы local: вы не можете этого сделать. Любые определения, сделанные внутри local -блока, являются локальными для этого блока и недоступны извне.

1 голос
/ 13 июля 2010

Либо это странный вопрос, либо вы неправильно его сформулировали ... В вашем примере кода используется 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.)

...