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