読者です 読者をやめる 読者になる 読者になる

ラムダ計算でナベアツ的な何か

(load "lambda-calc.l")
(load "grass-primitive.l")

(defvar %floor
  (lambda (m)
    (lambda (n)
      (funcall
       (% (% %ge m n)
          (lambda ()
            (let ((c (% %floor (% %sub m n) n)))
              (% %cons ($ %succ %car c) (% %cdr c))))
          (lambda () (% %cons %0 m)))))))

(defun nabe ()
  (let* ((chn (% (cn 247) succ w))
         (%3 (cn 3))
         (%10 (cn 10))
         (cr (% (cn 150) succ w))
         (lf (% (cn 147) succ w))
         (has3? (lambda (self)
                  (lambda (n)
                    (let ((c (% %floor n %10)))
                      (funcall
                       (% (% %eq %3 (% %cdr c))
                          (lambda () %t)
                          (lambda ()
                            (funcall
                             (% (% %iszero (% %car c))
                                (lambda () %f)
                                (lambda () (% self (% %car c))))))))))))
         (nabe? (lambda (n)
                  (% %or
                     ($ %iszero %cdr (% %floor n %3))
                     (% %y has3? n))))
         (prn (lambda (n)
                (% n out (% (% nabe? n) chn w))
                (% out cr)
                (% out lf)))
         (itr (lambda (self)
                (lambda (m)
                  (lambda (n)
                    (% prn m)
                    (funcall
                     (% (% %eq m n)
                        (lambda () m)
                        (lambda () (% self (% %succ m) n)))))))))
    (% %y itr (cn 1) (cn 40))))

実行

* (nabe)
w
ww
nnn
wwww
wwwww
nnnnnn
wwwwwww
wwwwwwww
nnnnnnnnn
wwwwwwwwww
wwwwwwwwwww
nnnnnnnnnnnn
nnnnnnnnnnnnn
wwwwwwwwwwwwww
nnnnnnnnnnnnnnn
wwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwww
nnnnnnnnnnnnnnnnnn
wwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwww
nnnnnnnnnnnnnnnnnnnnn
wwwwwwwwwwwwwwwwwwwwww
nnnnnnnnnnnnnnnnnnnnnnn
nnnnnnnnnnnnnnnnnnnnnnnn
wwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwww
nnnnnnnnnnnnnnnnnnnnnnnnnnn
wwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwww
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
#<CLOSURE (LAMBDA (F)) {AF746D5}>

floorは商と剰余をconsして返す関数。
後は草を植えるだけ…
これはあれだ、田植えのように一日でやるのは無理だから、植林のつもりで。