2015-02-22 3 views

ответ

2

let*, за счет более высокой способности, должен сериализовать определяемые термины (поскольку каждый из них может зависеть от предыдущих), тогда как термины в let могут быть установлены в любом порядке (и даже параллельно, если это позволит архитектура).

3

Ответ Скотта правильный, но я хочу передать в другой перспективе.

Культура схемы очень важна для функционального программирования. Функциональный код не должен заботиться о порядке операций. Это, в самом деле, почему такое выражение, как (foo (bar) (baz (qux))) ничего не говорит о каком порядке эти функции будут работать, за исключением того, что:

  1. qux будет выполняться до baz запускается
  2. как bar и baz будет запускается перед foo запускается

В частности, qux может быть запущена до или после того, как bar, и даже последовательности, как quxbarbazfoo действителен.

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

Смежные вопросы