Схема: когда использовать let, let* и letrec?

В чем разница между let, let* и letrec?

Пожалуйста, дайте подробные пояснения и примеры.


person Sol Bethany Reaves    schedule 13.05.2013    source источник


Ответы (1)


Лучше всего прочитать официальные описания R5RS let, let* и letrec.

Короче, однако:

(let ((x 2))
 (let ((x 3) (y x))
  y) => 2

(let ((x 2))
 (let* ((x 3) (y x))
  y) => 3

Таким образом, разница между let и let* заключается в том, что let будет оценивать все привязки относительно уровня выше (поэтому не имеет значения, в каком порядке они перечислены), а let* делает это последовательно. (let* ((x a) (b y))) эквивалентно (let ((x a)) (let ((b y))).

letrec, с другой стороны, позволяет привязывать рекурсивные значения. Таким образом, вы можете написать рекурсивную функцию, которая должна находиться только в пределах области действия функции, и связать ее с именем, используя letrec.

person Greg    schedule 13.05.2013