Подтвердить что ты не робот

Пусть vs letfn для определения локальных функций в clojure?

Когда на практике следует использовать letfn vs. let для определения локальных функций? Как насчет случаев, когда мне нужны как локальные функции, так и локальные не-функции?

4b9b3361

Ответ 1

Если мне нужна только локальная функция или 2... или 3... я позволю им. Если мне нужно позволить сочетание функций и не-функций, я просто использую нормальный let. letfning и letting будет очень многословным способом сделать это.

Однако, если вам нужна взаимная рекурсия через ваши локальные функции, вам нужно будет разрешить их в любом случае.

Краткая версия: используйте их, если считаете, что это выглядит лучше, и когда это удобно. Нет никаких жестких и быстрых правил для использования. Это всего лишь инструменты в панели инструментов Clojure.

Удачи!

Ответ 2

Обычно проще и удобнее использовать let: таким образом вы можете определить набор как функций, так и не-функций в одной форме и даже ссылаться на предыдущие определения:

(let [f     (fn [x] ....)
      value (reduce f some-collection)
      foo   bar]
  .....)

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