8

我遇到了这个使用惰性序列的 Pascal 三角形的优雅实现。

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

谁能帮我理解,,,在这种情况下?我尝试使用macroexpand,但这并没有让我走远。我也知道它的使用不是必需的,但我想知道这,,,意味着什么。

4

1 回答 1

13

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

在这种情况下,->>宏将(concat ...)在对 的调用的最后一个位置插入(map ...),即在 的位置,,,

,,,常用的 with和->->>使代码更具可读性,但实际上并没有做任何事情。

于 2012-09-23T10:22:12.827 回答