#:g1: リーダーマクロで略語/リテラル表現 その三

Posted 2012-12-10 15:00:00 GMT

今回は、リーダーマクロで略語/リテラル表現 その三です。

リテラル表記あれこれ

普段リーダーマクロだとは意識してないことが多いですが、細かくみるとリーダーマクロで実現していることが多かったりします。

真偽値

Schemeでお馴染の#t・#fですが、80年代初頭のMacLISPやNILやTでは、#tがリーダーマクロで真値を表現していたこともあったようです。しかし、そんな処理系も偽は#fではなくNILなので#fは比較的新しく導入されたようです。(LISP1.5でもFは偽だったりしますが)

文字

文字は、MacLISP系では、#x として表わすことが多いようです。昔は、エスケープ文字が/だったので、#/とも。コントロール文字を表現するために、#^xや、文字コードから文字を作る #=65 ;=> #A というようなバリエーションもあったようです。Clojureでは、\xという風にバックスラッシュ一つで表現するようですが、Clojure一文字マクロが多めのようです。

文字列

文字列は、最近の言語では大抵""かなと思いますが、中身で特殊文字が使えたり、補間ができたり色々バリエーションがあります。Common Lispでは、特殊な記法は何も使えませんが、最近のSchemeでは、\nや\t等が解釈されたりします。これもリーダーマクロなので、変更しようと思えば、変更できます。

ハッシュ

ハッシュはCommon Lispや、Schemeにはリテラル表現が標準で存在しないので、リテラル表現が欲しいと話題になることが多いかと思います。Clojureでは、{:a 1 :b 2 :c 3}のように、{}で表現できるようです。

正規表現

いまどきの言語では、正規表現のサポートは当り前ですが、Common Lisp等は古めなので標準でのサポートはありません。Gaucheでは、#/pattern/、Clojureでは、と#"pattern"となっています。Gaucheでは正規表現リテラルは、関数のように振る舞うことが可能で、(#/f/ "bar") ;=> #fのようなことも可能です。

構造体

Common Lispの場合、ユーザーが定義した構造体は、#s(name :x 1 :y 2)のようにリテラル表記が可能です。

その他

その他にもリーダーマクロで表現されたものは色々とあります。

まとめ

今回は、リテラルのリーダーマクロの表記関係を細々と集めてみました。
次回は、リーダーマクロで略語/リテラル表現 その四 です。

comments powered by Disqus