(defn lazy-triangle ([] (cons [1] (lazy-triangle [1]))) ([row] (let [pairs (partition 2 1 row) next-row (concat [1] (map #(apply + %) pairs) [1])] (lazy-seq (cons (vec next-row) (lazy-triangle next-row)))))) ;; ;; user=> (pprint (take 10 (lazy-triangle))) ;; ([1] ;; [1 1] ;; [1 2 1] ;; [1 3 3 1] ;; [1 4 6 4 1] ;; [1 5 10 10 5 1] ;; [1 6 15 20 15 6 1] ;; [1 7 21 35 35 21 7 1] ;; [1 8 28 56 70 56 28 8 1] ;; [1 9 36 84 126 126 84 36 9 1]) ;;