2013-03-15 2 views
8

Я только начал использовать Clojure, и мне было интересно, почему следующее не работает, как ожидалось:Clojure - парциальное в `->` макро

(-> 5 
    - 
    (partial + 5)) 

Я бы ожидать, что результат этого выражения в 0 (-5 + 5), но вместо этого все это кажется частичным.

(macroexpand `(-> 5 - (partial + 5)) 
    #_=>) 
(clojure.core/partial (clojure.core/-> 5 clojure.core/-) clojure.core/+ 5) 

Почему это и как я могу делать то, что хотел?

+0

Может быть, вам не нужно частично в этом случае? '(-> 5 - (+ 5))' – hsestupin

ответ

10

необходим дополнительный набор скобок:

user> (-> 5 - ((partial + 5)))                                    
0 

в -> макро вставляет результат предыдущего выражения в качестве второго аргумента в списке, таким образом, в вашем примере это будет Ег, чтобы (partial (- 5) + 5) с дополнительным() его вставлен после частичной функции ((partial + 5) (- 5))

+0

Ага, это имеет смысл. Благодарю. –

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