On Lispの、とある Common Lisp のコードを Scheme に変換して打ち込んでいたのですが if の違いに気づかずハマりました。 if は Scheme でも Common Lisp でも (if test consequent alternate) のような形式です。 ただ alternate が省略されたときの振舞いが違うようです。 Scheme では R5RS でその場合の戻り値は未規定であると明記されています。 Gauche の場合は gosh> (if #f #t) => #<undef> #が返ります。 Common Lisp は全然詳しくないのですが手元の gcl では >>(if nil t) NIL NIL が返るようです。 これが何で問題かというと NIL は明らかに「偽」なのですが、未規定な値は「真」とも「偽」とも決められず実装依存です。 実際 Ga