RosettaCodeData/Task/Binary-digits/Binary-Lambda-Calculus/binary-digits-1.blc
2026-04-30 12:34:36 -04:00

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))