Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Has been cancelled
46 lines
1.3 KiB
Plaintext
46 lines
1.3 KiB
Plaintext
;; fib.hs — infinite Fibonacci stream classic program.
|
|
;;
|
|
;; The canonical artefact lives at lib/haskell/tests/programs/fib.hs.
|
|
;; The source is mirrored here as an SX string because the evaluator
|
|
;; doesn't have read-file in the default env. If you change one, keep
|
|
;; the other in sync — there's a runner-level cross-check against the
|
|
;; expected first-15 list.
|
|
|
|
(define
|
|
hk-prog-val
|
|
(fn
|
|
(src name)
|
|
(hk-deep-force (get (hk-eval-program (hk-core src)) name))))
|
|
|
|
(define hk-as-list
|
|
(fn (xs)
|
|
(cond
|
|
((and (list? xs) (= (first xs) "[]")) (list))
|
|
((and (list? xs) (= (first xs) ":"))
|
|
(cons (nth xs 1) (hk-as-list (nth xs 2))))
|
|
(:else xs))))
|
|
|
|
(define
|
|
hk-fib-source
|
|
"zipPlus (x:xs) (y:ys) = x + y : zipPlus xs ys
|
|
zipPlus _ _ = []
|
|
myFibs = 0 : 1 : zipPlus myFibs (tail myFibs)
|
|
result = take 15 myFibs
|
|
")
|
|
|
|
(hk-test
|
|
"fib.hs — first 15 Fibonacci numbers"
|
|
(hk-as-list (hk-prog-val hk-fib-source "result"))
|
|
(list 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377))
|
|
|
|
;; Spot-check that the user-defined zipPlus is also reachable
|
|
(hk-test
|
|
"fib.hs — zipPlus is a multi-clause user fn"
|
|
(hk-as-list
|
|
(hk-prog-val
|
|
(str hk-fib-source "extra = zipPlus [1, 2, 3] [10, 20, 30]\n")
|
|
"extra"))
|
|
(list 11 22 33))
|
|
|
|
{:fails hk-test-fails :pass hk-test-pass :fail hk-test-fail}
|