ということで、print-as-golf
コンビネータ算法スタイルの Lazy K のソース*1を手でゴルフ用に整形*2するのが面倒くさくなったので、print-as-golf を書いてみたよ。これが最短だという保証はないけどね。
使う時は lazier.scm の print-as-cc や print-as-unlambda と同じ様に
(print-as-golf (laze 'foobar))
とか
(print-as-golf (laze '(lambda(a)(foobar a))))
ってしてね♥
(define (print-as-golf code) (display-as-golf code) (newline)) (define (display-as-golf code) (letrec ((print-leaf (lambda(leaf) (if (memq leaf '(s k i)) (display leaf) (format #t "[~a]" leaf)))) (print-shorter (lambda(expr) (if (pair? expr) (if (pair? (car expr)) (begin (display "(") (display-as-golf expr) (display ")")) (begin (display "`") (print-leaf (car expr)) (print-shorter (cadr expr)))) (print-leaf expr))))) (if (pair? code) (begin (display-as-golf (car code)) (print-shorter (cadr code))) (print-shorter code))))