Я нахожусь в процессе изучения Clojure, через «Clojure для Храброго и Истинного».
На уроках макросов я пробовал следующий макрос,
(defmacro report
[to-try]
`(let [result# ~to-try]
(if result#
(println (quote ~to-try) "was successful:" result#)
(println (quote ~to-try) "was not successful:" result#))))
И нижеВот пара моих экспериментов с макросом и соответствующими выводами.
1
(map #(report %) ['(= 1 2) '(= 1 1)])
; p1__26622# was successful: (= 1 2)
; p1__26622# was successful: (= 1 1)
2
map #(report %) ['false 'true])
; p1__26612# was not successful: false
; p1__26612# was successful: true
И мои вопросы:
- Почему в первом случае макрос печатал true для обоих значений?
- В моем понимании второе точно соответствует первому.Но почему это дает другой результат?