#:g1: srfi 88の紹介

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

 LISP Library 1000 の366回目です。
毎日は書きませんが、中途半端なストックがあるので、たまにちょろちょろ出していきます。

srfi 88とはなにか

 srfi 88は、Marc Feeley氏によるSchemeのキーワードオブジェクトについての提案です。

パッケージ情報

パッケージ名srfi 88
SRFI 88SRFI 88: Keyword objects

試してみる

 Lispとキーワード引数というとCommon Lisp、さらに遡るとZetalispあたりが起源になるかと思いますが、これらの形式は、:fooという風にコロンが前置されます。
Smalltalkだとコロンは後置されますが、オブジェクト指向言語は、こちらに倣っていることが多いようで、Dylanもこっちです(といってもシンボルの表記ですが)。
今回紹介するsrfi 88では、後置形式を採用しています。何故後置かですが、別にSmalltalkに倣った訳ではないらしく、srfi-42の様に前置のコロン付きのシンボルを利用している既存のプロジェクトと競合しないように選んだようです。
軽く確認してみたところでは、デフォルトでキーワードを後置のコロンで表わす処理系は、Chicken、STKlos等がありますが、それぞれ、#:fooや、:fooで書けたりもするようです。

 このsrfiで定義されている関数は、keyword?、keyword->string、string->keywordの3つのみです。
ちなみに、Chickenだと、(keyword? ':) => #fだったりして微妙ですが、空白文字からstring->keywordしたものを戻すと処理はされるので印字表現と読み込みの関係の問題かもしれません。

(keyword? 'foo:)
;=> #t

(keyword->string (string->keyword "")) ;=> ""

まとめ

 Lispのキーワードが前置にコロンになったのはパッケージ表記の問題だと思いますが、キーワード引数をメッセージの表記として多用する、Smalltalkに影響を受けたFlavorsは、キーワード引数というものが確立する前に誕生していました。
この辺りの経緯もいつか詳しくまとめてみたいところです。

comments powered by Disqus