#:g1: foxの紹介

Posted 2014-12-08 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の343日目です。

foxとはなにか

 foxは、Joo ChurlSoo氏作の整形出力のユーティリティです。

パッケージ情報

パッケージ名fox
Chicken eggs:FOX - The Chicken Scheme wiki

インストール方法

$ sudo chicken-install fox

すれば、

(use fox)

で使えます。

試してみる

 自分的には面白SRFIの人なJoo ChurlSoo氏ですが、foxは、srfi 54 catの改良型とのことです。

catは、引数の型によってオプションの意味が変わってくるという珍しい引数の取り方をしますが、foxでも同様です。
catではこの方式が難解だったということで、foxでは、分かりやすくしたということのようです。
ということで、catとfoxを並べてみると下記のような感じです。

(cat 129995 10 '(#\,) 'sign)
;=> "  +129,995"

(fox 129995 10 '#(",") '(sign)) ;=> " +129,995"

(cat 1234 10) ;=> " 1234"

(fox 1234 10) ;=> " 1234"

(cat 1234 -10) ;=> "1234 "

(fox 1234 -10) ;=> "1234 "

(cat 123456789 '(#\, 3) 15) ;=> " 123,456,789"

(fox 123456789 #("," 3) 15) ;=> " 123,456,789"

(cat 1234 10 'sign) ;=> " +1234"

(fox 1234 10 '(sign)) ;=> " +1234"

(cat "foo" 10 #\_ `(,string-upcase ,string-reverse)) ;=> "_______OOF"

(fox "foo" 10 #\_ `(,(compose string-upcase string-reverse) . 0)) ;=> "_______OOF"

(with-output-to-string (lambda () (cat "foo" out 10 #\. (list string-titlecase string-reverse)))) ;=> ".......ooF"

(with-output-to-string (lambda () (fox "foo" #t 10 #\. `(,(compose string-reverse string-titlecase) . 0)))) ;=> ".......ooF"

どの辺りが分かりやすくなったのかという気がしないでもありません…。

まとめ

 今回は、foxを紹介してみました。
引数の型に意味を持たせるというアイデアはあまり使われていないようなので、今後開拓の余地があるかもしれません。

comments powered by Disqus