Не понимаю, как работает эта дай-лямбда - PullRequest
0 голосов
/ 14 декабря 2018

Я вернулся с другим вопросом схемы.Это пример из книги Дибвига Язык программирования схем , и я понимаю, что происходит:

(let ([x 'a])
  (let ([f (lambda (y) (list x y))])
    (f 'b))) --> (a b)

Однако он сразу же следует за этим измененным примером, который я не понимаю:

(let ([f (let ([x 'sam])
             (lambda (y z) (list x y z)))])
  (f 'i 'am)) --> (sam i am)

В разговоре (f 'i 'am) Я не знаю, что происходит, это мое замешательство.Я не вижу, как f определяется с двумя параметрами.Как лямбда-параметры всплывают из-за отсутствия лучшего термина к f ??Я думаю, что код let ([x 'sam]) заблокирует это.Но это не так, очевидно.Я надеюсь, что моя английская формулировка моего беспорядка имеет смысл.

1 Ответ

0 голосов
/ 14 декабря 2018

f определяется как (lambda (y z) (list x y z)), где x определяется как 'sam.

Давайте разберем это немного.

(let ([x 'sam])
    (lambda (y z) (list x y z)))

Это оценивается каклямбда (которую я назову that_lambda, потому что могу).

(let ([f that_lambda])
  (f 'i 'am)) --> (sam i am)

Это оценивается как (that_lambda 'i 'am).

Поскольку that_lambda был определен * в области действия *, где x было 'sam, x используется внутри that_lambda относится к 'sam.


* Я так долго не делал Лисп, что не знаю,мои условия верны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...