R7RS-smallの仕様に準拠した実装で(infinite? z)
と(nan? z)
の両方とも#t
を返すことがあり得ます。例えば+inf.0+nan.0i
のようなcomplex numberを扱える実装ではそうなるはずです。
R6RSでは、上記の2つの手続きの引数はreal numberに限って定義されていたため、そのようなケースはありませんでした。実装はどのように拡張しても構いませんでした。しかしR7RSの場合は、(and (infinite? a) (nan? b))
が#t
となるreal number a
およびb
が存在する実装でcomplex numberをサポートするなら、必ず(let ((c0 (make-rectangular a b)) (c1 (make-rectangular b a))) (and (infinite? c0) (nan? c0) (infinite? c1) (nan? c1)))
は#t
でなければなりません。
参考: