R7RS's infinite NaN (2016-12-28)

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 でなければなりません。

参考: