我偶然发现了使用懒惰序列的Pascal三角形的优雅实现。
(def pascal
(iterate
(fn [prev-row]
(->>
(concat [[(first prev-row)]] (partition 2 1 prev-row) [[(last prev-row)]])
(map (partial apply +) ,,,)))
[1M]))
在这种情况下,有人可以帮我理解,,,
吗?我尝试使用macroexpand
,但这并没有让我走得太远。我也知道它不是必需的,但我想知道,,,
的含义。
答案 0 :(得分:13)
在Clojure中逗号被视为空格,因此Reader将完全忽略,,,
。它的原因是使代码对人类更具可读性。
在此上下文中,->>
宏会将(concat ...)
插入(map ...)
调用的最后位置,即位于,,,
的位置。
,,,
通常与->
和->>
宏一起使用,以使代码更具可读性,但实际上并没有做任何事情。