Factorに入門する(20) inlineそのいち

[ Factor ]

「特定のディレクトリにあるjpgファイルのリスト」を得る用事(用事?)があって、factorで書いてみたらけっこう苦労しました。

USING: io.directories io.pathnames kernel sequences io ;
IN: filelist

<PRIVATE
: filter-quot ( str -- quot ) [ file-extension ] swap [ equal? ] curry compose ; inline
PRIVATE>

: filelist ( path ext -- seq ) 
    dupd [ directory-files ] dip filter-quot filter 
   [ dupd "/" swap 3append ] map nip ;

最初は、filer-quotのinline指定なしで書いてみました。そうすると、filelistのコンパイルに失敗します。曰く、

Got a computed value where a literal quotation was expected

filter-quotで生成したquotationを、filterに渡しているところでこのエラーが発生しているようです。filterはliteralのquotationじゃないと受け付けないと。それじゃ全然quotation使えないじゃん!

と悩むこと30分。inline指定しておけばよいことがわかりましたが...これは「optimizing compiler」でのみ効くとのこと。つまり、optimizing compilerを使わなければinline指定しなくても動くはずとのこと。

まだよくわからないので、続きます。

トラックバック

このエントリーのトラックバックURL:
http://www.skoji.jp/mtbin/mt-tb.cgi/1271

コメントを投稿