diff options
Diffstat (limited to 'fiboY.lisp')
-rw-r--r-- | fiboY.lisp | 39 |
1 files changed, 12 insertions, 27 deletions
@@ -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))))) |