41 lines
1.6 KiB
Text
41 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-combinator2
|
|
#+nil
|
|
(lambda (g)
|
|
(let ((inner (lambda (x) (g (x x)))))
|
|
(inner inner)))
|
|
(lambda (f)
|
|
(let ((inner (lambda (x)
|
|
(f (lambda (y z)
|
|
(x x y z))))))
|
|
(inner inner))))
|
|
(ascii-zero (lambda (f)
|
|
(2 2 2 (3 f))))
|
|
(ascii-one (lambda (f x)
|
|
(f (ascii-zero f x))))
|
|
(binary (fixpoint-combinator2
|
|
(lambda (recur acc n)
|
|
((div2 n)
|
|
(lambda (res rem)
|
|
(let ((todigit (lambda (x)
|
|
(x ascii-one ascii-zero))))
|
|
(res
|
|
(lambda (x)
|
|
;; cons ascii acc
|
|
(recur (lambda (p) (p (todigit rem) acc)) res))
|
|
;; cons ascii acc
|
|
(lambda (p) (p (todigit rem) acc))))))))))
|
|
(binary nil))
|