From ef9684b0bf2780800ae3349819239e4f0a0c9c25 Mon Sep 17 00:00:00 2001 From: tomsmeding Date: Wed, 13 Dec 2017 23:25:53 +0100 Subject: Make fiboY work --- fiboY.lisp | 39 ++++++++++++--------------------------- 1 file changed, 12 insertions(+), 27 deletions(-) (limited to 'fiboY.lisp') 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))))) -- cgit v1.2.3-54-g00ecf