CLでSRFI-41 — #:g1

Posted 2012-02-11 10:55:00 GMT

CLでSRFI、今回は、SRFI-41の「Streams」です。
ストリームは、SRFI-40で定義されていましたが、SRFI-40は、非推奨(deprecated)になってしまったようで、SRFI-41で置き換えられたようです。
SRFI-40の内容に加えて、ユーティリティが沢山定義されています。

動作

(defun fib (n)
  (stream-ref
   (stream-let lp ((n 1) (m 0))
     (stream-cons m (lp (+ n m) n)) )
   n))

(fib 10) ;=> 55

移植について

stream-matchは、syntax-caseで定義されているので、見送りました。syntax-caseが動くようになったらチャレンジしてみようと思っています。
stream-foldでは、'()と#fを同一のnilで表現しては上手く動かないので#fを:falseとしています。
stream-ofで使われるキーワードのin、isは、:in、:isとしてあります。

comments powered by Disqus