8

遅延シーケンスを使用するパスカルの三角形のこのエレガントな実装に出くわしました。

(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 ...)、つまり の位置に を挿入し,,,ます。

コードを読みやすくするためにマクロと一緒に,,,よく使用されますが、実際には何もしません。->->>

于 2012-09-23T10:22:12.827 に答える