在Clojure中解释懒惰Pascal的三角形

时间:2012-09-23 09:52:35

标签: clojure functional-programming

我偶然发现了使用懒惰序列的Pascal三角形的优雅实现。

(def pascal
  (iterate
   (fn [prev-row]
     (->>
      (concat [[(first prev-row)]] (partition 2 1 prev-row) [[(last prev-row)]])
      (map (partial apply +) ,,,)))
   [1M]))

在这种情况下,有人可以帮我理解,,,吗?我尝试使用macroexpand,但这并没有让我走得太远。我也知道它不是必需的,但我想知道,,,的含义。

1 个答案:

答案 0 :(得分:13)

在Clojure中逗号被视为空格,因此Reader将完全忽略,,,。它的原因是使代码对人类更具可读性。

在此上下文中,->>宏会将(concat ...)插入(map ...)调用的最后位置,即位于,,,的位置。

,,,通常与->->>宏一起使用,以使代码更具可读性,但实际上并没有做任何事情。