[Gauche-devel-jp] handing keyword in ref

Back to archive index

Masatake YAMATO yamat****@redha*****
2010年 8月 26日 (木) 21:34:06 JST


> From: Masatake YAMATO <yamat****@redha*****>
> Subject: Re: [Gauche-devel-jp] handing keyword in ref
> Date: Wed, 25 Aug 2010 23:13:27 +0900 (JST)
> 
>> open-output-fileのキーワード引数に:if-existsがあります。infoによればここに
>> 値として
>>          :supersede
>>          :append
>>          :overwrite
>>          :error
>> 
>> が指定できることになっています。そこで質問なのですがこれがシンボルでは
>> なくキーワードとしたのはどういった経緯からでしょうか?
> 
> Common Lispに合わせてあります。
> http://www.lispworks.com/documentation/HyperSpec/Body/f_open.htm
> 
> CLの場合、シンボルを取ることにするとパッケージを気にするのが面倒なので
> こういう「いくつかのオプションから選ぶ」場合にはキーワードを使いますね 
> (正確には、CLではキーワードは「keywordパッケージに属するシンボル」ですが)。
> 
> Schemeではオフィシャルにはキーワードが無いので、SRFIや他のScheme実装に
> 合わせたAPIでは「いくつかのオプションから選ぶ」のにシンボルを使う場合があります。
> (例: string-join)。
> 
> Gaucheは既存のAPIがある場合はなるべくそれに合わせようという方針なので、
> 由来によって不統一になってる部分はあります。
> (ただ、あまりにGaucheの慣習から離れる場合はGauche側に沿うように変えますし、
> 可能ならオリジナルのAPIと統一的なAPIの両方を用意するということもします)
> 
> キーワード引数については、既存のAPIに合わせたものはほぼCL由来でシンボルよりは
> キーワードを値に取るようになってると思うので、新規のAPIでもそれに合わせる
> のがいいんじゃないかと思っています。
> 
> オプショナル引数についてはScheme由来でシンボルを取るものが多いのと、
> 複数のオプショナル引数があってその最初のものにキーワードを渡すと
> キーワード引数呼び出しみたいに見えてしまうという可能性もあるので、
> 逆にシンボルを取る方を優先したいですね。

なるほどCommon Lispに由来しているのですね。すっきりしました。
ありがとうございます。

キーワードを使っているのは慣例であり、Gaucheを使って独自にスクリプトを
書いているのであれば、必ずしも慣例にしたがう必要はなさそうです。自作の
プログラムでは積極的にシンボルを使おうと思います。

大和

 
> --shiro
> 
> _______________________________________________
> Gauche-devel-jp mailing list
> Gauch****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/gauche-devel-jp




Gauche-devel-jp メーリングリストの案内
Back to archive index