#hy
#hy
Вопрос:
Возможно, я что-то недопонимаю.
В Hy if*
может принимать (после if*
символа)
- один предикат (оценка возвращается, если больше нет выражений)
- ноль или один последующий (вычисляется и возвращается, если предикат является истинным)
- (если существует следствие) ноль или одна альтернатива (вычисляется и возвращается, если предикат является ложным)
Если предикат является ложным и альтернативное выражение не указано, None не возвращается.
if
(без звезды) может обрабатывать любое количество пар предикатов и следствий, при этом вычисляется и возвращается окончательное необязательное выражение без предикатов, если ни один из предикатов не оценивается как истинный.
Чем это отличается от cond
, за исключением необходимости cond
использования скобок вокруг пар предикат-следствие?
Ответ №1:
Обновить
По состоянию на # 2240 (объединено 2 марта 2022 года) if
и cond
несколько отличаются от того, какими они были раньше, и лучше отличаются друг от друга. if
требуется ровно три аргумента:
(if condition-form
then-form
else-form)
cond
принимает любое четное число аргументов и не требует скобок или предоставляет неявные do
s:
(cond
condition1 then1
condition2 then2
condition3 then3)
if*
удалено.
Оригинальный ответ
Квадратные скобки в cond
обеспечивают неявное do
значение . Вот и все. Обычно я использую if
только для случаев с двумя ветвями и cond
для всего остального. Существование if*
на самом деле просто деталь реализации.
Комментарии:
1. Спасибо, @Kodiologist!