diff options
author | tomsmeding <tom.smeding@gmail.com> | 2017-12-09 10:48:58 +0100 |
---|---|---|
committer | tomsmeding <tom.smeding@gmail.com> | 2017-12-09 10:48:58 +0100 |
commit | 897fb17dd6a045a7056e6d6babbbb24748f698f6 (patch) | |
tree | 65f0659483ba2239d07e30b3547379625f5b5cae /fiboY.lisp |
Initial
Diffstat (limited to 'fiboY.lisp')
-rw-r--r-- | fiboY.lisp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/fiboY.lisp b/fiboY.lisp new file mode 100644 index 0000000..f46c00a --- /dev/null +++ b/fiboY.lisp @@ -0,0 +1,39 @@ +(define YY (recur) (lambda (f) (lambda (a) (f ((recur recur) f) a)))) +(define Y (YY YY)) + +(define forX (recur (low high func)) + (if (low <= high) + (do + (func low) + (recur (list (+ low 1) high func))) + '())) + +(define for (Y forX)) + +(define fibohelperX (recur (n a b)) + (if (n <= 0) a + (recur (list (- n 1) b (+ a b))))) + +(define fibohelper (Y fibohelperX)) + +(define fibo (n) (fibohelper (n 0 1))) + + + + + +; Fill in the dots with the lines below... +; If you're done, try to dump the whole expression into test.hs. + +; ((lambda (YY) ...) (lambda (recur) (lambda (f) (lambda (a) (f ((recur recur) f) a))))) +; +; ((lambda (Y) ...) (YY YY)) +; +; ((lambda (forX) ...) (lambda (recur args) ; args: (low high func) +; (if ((car args) <= (cadr args)) +; (do +; ((cadr (cdr args)) (car args)) +; (recur (list (+ low 1) high func))) +; '()))) + + |