# Лямбда-марко у Clojure не всегда совпадает с (fn)? - PullRequest
4 голосов
/ 11 декабря 2010
user> (map (fn [k] [k]) [1 2 3])
([1] [2] [3])
user> (map #([%1]) [1 2 3])
.... Error..

Почему во втором примере ошибка?

1 Ответ

3 голосов
/ 11 декабря 2010

Макрос читателя #(<expr>) заключает в <expr> дополнительные скобки, поэтому #([%1]) расширяется до значения, эквивалентного (fn [%1] ([%1])), а не (fn [%1] [%1]).Значит ты прав.Они не полностью эквивалентны.

Вы можете попробовать следующее в REPL, которое покажет точное расширение:

user=> '#([%1])                   
(fn* [p1__862#] ([p1__862#]))
user=> '#(inc %1) 
(fn* [p1__865#] (inc p1__865#))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...