Я работаю над примером деструктурирования в Joy of Clojure, и я кулаком на примере, который меня удивил. Оба они производят один и тот же вывод:Слева направо для привязки в форме формы
(let [range-vec (vec (range 10)) [a b c & more :as all] range-vec]
(println "a b c: " a b c)
(println "more: " more)
(println "all: " all))
(let [range-vec (vec (range 10))]
(let [[a b c & more :as all] range-vec]
(println "a b c: " a b c)
(println "more: " more)
(println "all: " all)))
Теперь изначально первая форму противопоставить свою интуицию, потому что, думая, что связывание и старшинство случилось слева направо, что диапазон-VEC не будет определен до назначения на «все» , I вторая форма, range-vec уже определена, а затем назначена всем во втором оператор let, который, как представляется, соответствует правилам, которые я знаю до сих пор. Когда я узнаю, когда был привязан символ и порядок, в котором это происходит?
Я новичок в lisps в целом, поэтому я не familia с 'let *'. Итак, привязки идут слева направо, а не справа налево? –
Да, привязки слева направо. Таким образом, ваши две версии эквивалентны. – Barmar
Спасибо, понял! –