#:g1: foof-loopの紹介

Posted 2014-09-15 13:30:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の258日目です。

foof-loopとはなにか

 foof-loopは、Taylor R. Campbell氏作の繰り返し構文のマクロで、Chickenに移植されたものです。

パッケージ情報

パッケージ名foof-loop
Chicken eggs:foof-loop: A Simple, Extensible Scheme Looping Facility - The Chicken Scheme wiki

インストール方法

$ sudo chicken-install foof-loop

すれば、

(use foof-loop)

で使えます。

試してみる

 Common LispのLOOPとnamed letとdoを足したような構文ですが、(末尾再帰でない)再帰で書いたり

(define (mapcar fn list)
  (loop rec ((for e (in-list list)))
        => '()
        (cons (fn e) (rec))))

お馴染のconsしてreverse!で書いたり、

(define (mapcar fn list)
  (loop ((for e (in-list list))
         (with ans '() (cons (fn e) ans)))
        => (reverse! ans)))

累積用の構文を使ったり

(define (mapcar fn list)
  (loop ((for e (in-list list))
         (for ans (listing (fn e))))
        => ans))

と色々できます。

 作者による詳しいドキュメンテーションとScheme48 Iterate、SRFI 42、Named let、DOとの比較があるので、詳しくはそちらを参照して下さい。

まとめ

 今回は、foof-loopを紹介してみました。
SRFI 42もCommon LispのLOOPっぽいですが、これもなかなかですね。

comments powered by Disqus