Friday, June 21, 2019

SICP in Clojure: Chapter 1, Exercise 12

This is my Clojure solution to Chapter 1, Exercise 12:

(ns sicp.ch1.ex12)

(defn pascal
  [i j]
  (if (or (zero? j) (= i j))
    1
    (+ (pascal (dec i) (dec j)) (pascal (dec i) j))))

(for [i (range 10)]
  (for [j (range (inc i))]
    (pascal i j))) ; Pascal's triangle

SICP in Clojure: Chapter 1, Exercise 11

This is my Clojure solution to Chapter 1, Exercise 11:

(ns sicp.ch1.ex11)

(defn f
  [n]
  (if (< n 3)
    n
    (+ (f (dec n))
       (* 2 (f (- n 2)))
       (* 3 (f (- n 3))))))

(defn f-iter
  ([n]
   (f-iter 2 1 0 n))
  ([a b c n]
   (if (zero? n)
     c
     (f-iter (+ a (* 2 b) (* 3 c)) a b (dec n)))))

(every? #(= (f %) (f-iter %)) (range 10)) ; => true