summaryrefslogtreecommitdiff
path: root/fiboY.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'fiboY.lisp')
-rw-r--r--fiboY.lisp39
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)))
+; '())))
+
+