scheme 処理系の手続き = の引数は幾つか
自分で scheme を実装しているときに、ふと分からなくなったため、Scheme 処理系の = の挙動を調べてみました。
手続き=は、R5RS には、以下のように定義されています。(6.2.5 Numerical operations)
※shiro さんにコメントを頂き、解決しました。
(=z1 z2 z3...) procedure
These procedures return #t if their arguments are (respectively): equal, ...
These predicates are required to be transitive.
斜め読みしただけでは、引数が0個、1個の場合がどうあるべきか、はっきり分かりませんでした。以下は(= 3) の評価結果です(Macport)。
- mit-scheme(9.0.1) #t
- guile(1.8.7) #t
- gauche(0.9) ERROR: wrong number of arguments
- scheme48(1.8) Error: wrong number of arguments
R6RS でも(11.7.4.3 Arithmetic operations)、定義はほとんど同じでした。
- ypsilon(0.9.6) #t
- ikarus(0.0.4) #t
部分的にしか RnRS を読んでいないのとわたしの英語力が怪しいため正しい定義がよくわかりませんが、仕様書を読むのは難しいというのがわたしの感想です。重箱の隅的ですが。
ちなみに、Common Lisp の場合は、引数が一つの場合=が t を返すことが example として明記されていました。