CLでSRFI-8 — #:g1

Posted 2011-05-31 10:44:00 GMT

今回は、SRFI-8 ですが、多値の束縛のための構文です。
- srfi-8.
- (http://srfi.schemers.org/srfi-8/srfi-8.html)
素のR5RSだと多値関係は、call-with-valuesで

(call-with-values
  (lambda ()
    (partition (precedes pivot) others))
  (lambda (fore aft)
    (append (qsort fore) (cons pivot (qsort aft)))))
のように書くようですが、もっと簡単に書きたいということで、
(receive (fore aft) (partition (precedes pivot) others)
  (append (qsort fore) (cons pivot (qsort aft))))
に書けるようにするもののようです。
CLで定義する場合は、MULTIPLE-VALUE-BINDと同じなので、
(setf (macro-function 'receive)
      (macro-function 'multiple-value-bind))
のように定義するのが一番簡単です。
receiveという名前は短くて便利そうなのでエイリアスを作成している人はちらほらいるのかなと思ってgoogleコード検索してみましたが、意外なことにみつけられませんでした。
mvbindとかmbindはあるようですが…。

comments powered by Disqus