一部のコードを読みやすくするために、case ステートメントを使用しようとしています。一連の if 文として動作するように見えますが、なぜか case 文は true でなくても常に nil との比較を受け入れます。この動作が発生する理由を誰かが明確にすることはできますか?
例:
> (case 'a
(nil nil)
(otherwise 'b))
NIL
> (case 'a
('a 'b)
(otherwise nil))
B
上記の例では、'a が明らかに nil ではないにもかかわらず、最初のインスタンスは nil を返します。if ステートメントで同じことをしようとすると、期待どおりに動作します。
> (if (eq 'a nil) nil 'b)
B
> (if (eq 'a 'a) 'b nil)
B
私が理解していないケースステートメントについていくつかの動作があると仮定しています。どんな助けでも大歓迎です。
編集:明確にするために、「aは評価されないことを知っています。この例をモックアップして、case ステートメントのターゲットが確実に nil でない状況を作成しました。
私は xlisp-plus を使用していますが、実際の clisp インストールを試して、動作が異なるかどうかを確認します。
編集(もう一度):CLISPをインストールすると、そこで正常に動作します。なぜ xlisp が異なるのかを調査するのに苦労する価値はありません。皆さん、健全性チェックをありがとう。