Я пытаюсь использовать оператор case, чтобы сделать некоторый код более читабельным. Кажется, он работает как серия операторов if, но по какой-то причине оператор case всегда принимает сравнение с нулем, даже если оно не соответствует действительности. Может кто-нибудь уточнить, почему происходит такое поведение?
Пример:
> (case 'a
(nil nil)
(otherwise 'b))
NIL
> (case 'a
('a 'b)
(otherwise nil))
B
В приведенном выше примере первый экземпляр возвращает ноль, хотя «явно не ноль. Попытка сделать то же самое, если оператор ведет себя так, как я ожидал:
> (if (eq 'a nil) nil 'b)
B
> (if (eq 'a 'a) 'b nil)
B
Я предполагаю, что в отношении заявления по делу есть какое-то поведение, которое я не понимаю. Любая помощь будет оценена.
Edit:
Просто чтобы уточнить, я знаю, что «не будет оцениваться. Я просто смоделировал этот пример, чтобы создать ситуацию, в которой целью оператора case было определенно НЕ ноль.
Я использую xlisp-plus, но собираюсь попробовать настоящую установку clisp и посмотреть, будет ли она вести себя по-другому.
Изменить (еще раз):
Установил CLISP и там все отлично работает. Не стоит беспокоиться, чтобы выяснить, почему xlisp отличается. Спасибо всем за проверку работоспособности.