Это выглядит просто стиль кодирования.
(if-not test then else)
(if (not test) then else)
(if test else then)
Приведенный выше код будет работать одинаково. Существует несколько способов писать код, чтобы сделать то же самое.
Возможно, автор макроса if-not
мог бы написать код таким образом.
(defmacro if-not
...
([test then else]
`(if (not ~test) ~then ~else)))
Когда мы читаем этот код (выше), мы можем думать в порядке if
, then
, else
, довольно простой.
(defmacro if-not
...
([test then else]
`(if ~test ~else ~then)
Да, это будет работать нормально. Однако, с точки зрения удобочитаемости, порядок then
и else
меняются местами, и это может вызвать смущение.
Именно поэтому (по моему мнению) автор реализовал if-not
таким образом.
В качестве альтернативы, редактирование вопроса таким образом, чтобы недействительные существующие ответы, как правило, недооценивается здесь, задавая новый отдельный вопрос (и, если исходный вопрос вряд ли будет полезен кому-либо еще, возможно, вежливо спрашивая человека, владеющего ответом, чтобы удалить его, если этот ответ поддерживается и, таким образом, предотвращает удаление вопроса) в качестве общей правой вещи. –
@CharlesDuffy О, извините. Новое для сообщества, незнакомое с конвенциями. Могу ли я спросить, как мне следует действовать должным образом? – damonh
(см., Например, http://meta.stackoverflow.com/questions/254521/editing-question-for-new-answer для обсуждения метаконференций для редактирования вопросов, влияющих на существующие ответы - это говорит о том, что это не любые средства - вопиющий случай, то, что правила действительно устраняют, - это «вопросы хамелеона», как описано в http://meta.stackexchange.com/questions/43478/exit-strategies-for-chameleon-questions) –