Scheme:!と?

Scheme:!と?

Schemeの名前づけの慣習には、一応こんなのがある。

a, bについてはほとんどの場合守られているといえるだろう。 ただ、よりきつい縛りであるa', b' については、srfiやライブラリレベルでは 守られていないこともあり、混乱を生じやすい。

ちょっとまとめてみる。

!の返り値

!の返り値が「利用できてしまう」もの

R5RS的には未定義だが、有用な値を返すもの。 portabilityを失うことを承知の上で使うぶんには構わない。

!の返り値を「利用せざるを得ない」もの

srfi-1, srfi-13, srfi-14等で"linear update version"と呼ばれる !-つき手続きは、規約上「破壊的変更が許されている」という ものなので、必ずしも引数が破壊的に変更されるとは限らない。 従って、結果を得たいなら必ず返り値を用いる必要がある。

?の返り値

#f, #t以外を返す?-関数

述語としてもよく使われるが、#f, #t以外を返すために?がついていないもの

つまり、本来の規則(b+b')に忠実なもの

その他の記号

/

多くは、withの略。

単なる区切り記号

Obscureなもの

*

bindingのスコープが上から順番である、ということ (起源はlet*か)

「順番に適用」というニュアンス (これもlet* からの類推だと思う)

手続き版に対するマクロ版で、裸のexpr...をlambdaでくるんでくれるもの (但し、scshではマクロ版が'*'無し、手続き版が'*'あり、というものが かなりあって、ややこしい)

汎化

バリエーション

$

これに関しては特にScheme間でのコンセンサスはなさげ。 Gaucheでは部分適用を表すのに使っている。

%

プライベートな手続き。なんとなく、「これは外の人は触っちゃいやーん」という ニュアンス。Lispの方でよく見る。

:

|

0, 1, ...

#

特殊文字。r5rsで定義されたもの以外はかなり勝手に使われている。

SchemeCrossReference:Index:punctuation あたり参照。

&

多値を返すときによく使われる。返すのはこれ「と(&)」これな感じ。

コンディション型(condition-type)のプレフィクス。 SRFI:35, SRFI:36, R6RSで使われる。

この問題に関する議論

参考

More ...