summaryrefslogtreecommitdiff
path: root/fiboY.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'fiboY.lisp')
-rw-r--r--fiboY.lisp39
1 files changed, 12 insertions, 27 deletions
diff --git a/fiboY.lisp b/fiboY.lisp
index f46c00a..d12a5ab 100644
--- a/fiboY.lisp
+++ b/fiboY.lisp
@@ -1,39 +1,24 @@
+(define cadr (l) (car (cdr l)))
+(define caddr (l) (car (cdr (cdr l))))
+
(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)
+(define forX (recur low_high_func)
+ (if (<= (car low_high_func) (cadr low_high_func))
(do
- (func low)
- (recur (list (+ low 1) high func)))
+ ((caddr low_high_func) (car low_high_func))
+ (recur (list (+ (car low_high_func) 1) (cadr low_high_func) (caddr low_high_func))))
'()))
(define for (Y forX))
-(define fibohelperX (recur (n a b))
- (if (n <= 0) a
- (recur (list (- n 1) b (+ a b)))))
+(define fibohelperX (recur n_a_b)
+ (if (<= (car n_a_b) 0) (cadr n_a_b)
+ (recur (list (- (car n_a_b) 1) (caddr n_a_b) (+ (cadr n_a_b) (caddr n_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)))
-; '())))
-
+(define fibo (n) (fibohelper (list n 0 1)))
+(for (list 1 25 (lambda (n) (print (fibo n)))))