40 lines
1.6 KiB
Text
40 lines
1.6 KiB
Text
(let ((div2 (lambda (n)
|
|
(n (lambda (x)
|
|
(x (lambda (so-far odd?)
|
|
(odd?
|
|
;; lambda (p) here and after is inlined cons
|
|
(lambda (p)
|
|
(p
|
|
;; Inlined successor
|
|
(lambda (f x)
|
|
(f (so-far f x)))
|
|
nil))
|
|
;; cons so-far t
|
|
(lambda (p) (p so-far t))))))
|
|
(lambda (p) (p 0 nil)))))
|
|
(fixpoint-combinator
|
|
#+nil
|
|
(lambda (g)
|
|
(let ((inner (lambda (x) (g (x x)))))
|
|
(inner inner)))
|
|
(lambda (f)
|
|
(let ((inner (lambda (x)
|
|
(f (lambda (y)
|
|
(x x y))))))
|
|
(inner inner))))
|
|
(hailstone (fixpoint-combinator
|
|
(lambda (recur n)
|
|
((div2 n)
|
|
(lambda (half n-odd?)
|
|
(half
|
|
(lambda (x)
|
|
;; lambda (p) is inlined cons
|
|
(lambda (p)
|
|
(p n (recur (n-odd?
|
|
(lambda (f x)
|
|
;; (succ (mult 3 n))
|
|
(f (3 (n f) x)))
|
|
half)))))
|
|
;; lambda (p) is inlined cons
|
|
(lambda (p) (p 1 nil)))))))))
|
|
hailstone)
|