Schemeの名前づけの慣習には、一応こんなのがある。 a. 破壊的操作を行う手続き、構文には!をつける (set-car! etc) a'. !のついた手続きの返り値は未定義(portableには利用できない) b. 真偽値を返す手続きには ? をつける b'. ?のついた手続きの返り値は真偽の判断のみに使える(#t以外の有用な 値を返すことはあてにできない) a, bについてはほとんどの場合守られているといえるだろう。 ただ、よりきつい縛りであるa', b' については、srfiやライブラリレベルでは 守られていないこともあり、混乱を生じやすい。 ちょっとまとめてみる。 !の返り値!の返り値が「利用できてしまう」もの!の返り値を「利用せざるを得ない」もの?の返り値#f, #t以外を返す?-関数述語としてもよく使われるが、#f, #t以外を返すために?がついていないものその他の記号/*$