CLでSRFI-49 — #:g1

Posted 2012-02-02 01:08:00 GMT

CLでSRFI、今回は、SRFI-49の「Indentation-sensitive syntax」です。
インデントによって構造化する構文ですが、使い勝手的に全然良くないので実際的にはこのままでは使えなさそうです。
比較演算子詰め合わせという感じで沢山定義されています。関数を返す関数をどんどん組み合わせて使いますが、その辺りがSchemeっぽいです。
折角なのでリーダーマクロを定義して混ぜて書けるようにしてみました。

動作

(= 55
  #@
  labels
   :group
    fib (n a1 a2)
     cond
      :group
       (zerop n)
       a2
      :group
       (= 1 n)
       a1
      :group
       T
       :group
        fib
        (1- n)
        (+ a1 a2)
        a1
   :group
    fib
    10
    1
    0)
;=> T

移植について

参照実装のreadは、改行等を読み捨てないようですが、CLのreadだと読み捨てるので、read-preserving-whitespaceを使う必要があります。

comments powered by Disqus