case-lambda

Schemeにおける通常のlambda式は、引数は固定です。
しかし、時々引数の個数で挙動が異なる手続きを書きたくなるものです。
アリティ( 引数の個数 )でラムダ式のbodyをディスパッチできる機能が、
case-lambdaです。

case-lambda

http://www.chino-js.com/ja/tech/srfi/srfi-16/srfi-16.html

使い方は下記のようになります。

(define (make-simple-slot val)
  (case-lambda
    (() val)
    ((new) (set! val new))))

(define a (make-simple-slot 'test))
(a) ==> test
(a 'hoge)
(a) ==> hoge

本題

case-lambdaはcondやcase同様、
節を構築するために()が深くなってしまっています。

そこで節を表す記号を導入することで、
表現を人間寄りにしてしまうのはどうか検証しています。

(defv make-simple-slot
  (v) -> (fn ()  -> (get v)
             (n) -> (set! v n)))

(defv a = (make-simple-slot 'test))
(a) ==> test
(a 'hoge)
(a) ==> hoge

=や->といった記号を導入することで、
構文が読みやすくなるのかどうか実験中です。