Learning/SICP/exercise_1_30.janet
2025-05-29 22:00:25 +02:00

50 lines
991 B
Plaintext

(defn sum-recur [term next a b]
(if (> a b)
0
(+ (term a)
(sum-recur term next (next a) b))))
(defn sum-iter [term next a b]
(defn iter [a result]
(if (> a b)
result
(iter (next a) (+ result (term a)))))
(iter a 0))
(defn cube [n]
(* n n n))
(defn inc [n]
(+ n 1))
(defn simpsons-recur [f a b n]
(def h (/ (- b a) n))
(defn fapply [k]
(f (+ a (* k h))))
(defn add-two [k]
(+ k 2))
(* (/ h 3)
(+
(f a)
(f b)
(* 4 (sum-recur fapply add-two 1 n))
(* 2 (sum-recur fapply add-two 2 (- n 1))))))
(defn simpsons-iter [f a b n]
(def h (/ (- b a) n))
(defn fapply [k]
(f (+ a (* k h))))
(defn add-two [k]
(+ k 2))
(* (/ h 3)
(+
(f a)
(f b)
(* 4 (sum-iter fapply add-two 1 n))
(* 2 (sum-iter fapply add-two 2 (- n 1))))))
(print (sum-recur cube inc 1 10))
(print (sum-iter cube inc 1 10))
(print (simpsons-recur cube 0 1 100))
(print (simpsons-iter cube 0 1 100))