以下に含める深さ N のパスカルの三角形を出力する単純なソリューションを実装しました。私の質問は、これをより慣用的にするためにどのように改善できるでしょうか? 過度に冗長またはぎこちないように見えるものがいくつかあるように感じます。たとえば、このif
ブロックは不自然に感じます: (if (zero? (+ a b)) 1 (+ a b))
. フィードバックをお待ちしております。
(defn add-row [cnt acc]
(let [prev (last acc)]
(loop [n 0 row []]
(if (= n cnt)
row
(let [a (nth prev (- n 1) 0)
b (nth prev n 0)]
(recur (inc n) (conj row (if (zero? (+ a b)) 1 (+ a b)))))))))
(defn pascals-triangle [n]
(loop [cnt 1 acc []]
(if (> cnt n)
acc
(recur (inc cnt) (conj acc (add-row cnt acc))))))