serene-simple/benchmarks/fib.srns

45 lines
885 B
Plaintext

(def reduce1
(fn (f xs initial-value)
(cond
((first xs) (reduce f (rest xs) (f initial-value (first xs))))
(true initial-value))))
(def map
(fn (f xs)
(reduce (fn (acc x) (cons acc (f x))) xs (list))))
(def range-list
(fn (x y init)
(if (< y x)
(do
(conj (range-list x (+ y 1) init) y))
init)))
(def range
(fn (x)
(range-list x 0 (list))))
(def fib
(fn (n)
(if (< n 2)
1
(+ (fib (- n 1))
(fib (- n 2))))))
(def benchmark-fn
(fn (x)
(let ((start (now)))
(fib x)
(- (now) start))))
(def run-benchmark
(fn (times)
(map (fn (x)
(println "Benchmark: " x)
(println "Took: " (benchmark-fn 30)))
(range times))))
(run-benchmark 20)