我实现了一个简单的解决方案来打印 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))))))