RosettaCodeData/Task/Hailstone-sequence/Binary-Lambda-Calculus/hailstone-sequence.blc
2026-04-30 12:34:36 -04:00

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)