В чем разница между if и cond?

#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!