> Date: Fri, 10 May 2019 01:28:15 -0400 > From: Nicholas Papadonis <nick.papadonis...@gmail.com> > > Does anyone know the proper code for a Y-combinator in Scheme that takes an > additional argument? I tried the following solutions. The non-tail > recursive implementation works, however the tail recursive implementaiton > fails. Appreciate any guidance here. Thanks > > ;; Y-combinator > (define Y > (lambda (f) > ((lambda (x) (f (delay (x x)))) > (lambda (x) (f (delay (x x))))))) > ;Value: y > ;; end Y-combinator > > ;; non-tail recursive, works > ((Y (lambda (r) > (lambda (x) > (if (< x 2) > 1 > (* x ((force r) (- x 1))))))) > 5) > ;Value: 120 > > ;; Tail reclusive implication, fails. > ((Y (lambda (r) > (lambda (x acc) > (if (< x 2) > acc > (r (- x 1) (* x acc)))))) > 5 1) > ;The object #[promise 18] is not applicable.
Try (force r) instead of r. _______________________________________________ MIT-Scheme-users mailing list MIT-Scheme-users@gnu.org https://lists.gnu.org/mailman/listinfo/mit-scheme-users