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

dar*_*h10 8 functional-programming clojure

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

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

任何人都可以帮我理解,,,这个背景吗?我尝试过使用,macroexpand但这并没有让我走得太远.我也知道它不是必需的,但我想知道这,,,意味着什么.

ddk*_*ddk 13

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

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

,,,通常与使用->->>宏使代码更易读,但实际上并没有做任何事情.