В чем заключается использование короткозамкнутых булевых операторов в Erlang?

Я изучаю Erlang из веб-книги LearnYouSomeErlang. Одна вещь, которая поразила меня, когда я училась, была недолговечным булевым соединением и операторами дизъюнкции, а именно: and и or. Каковы варианты использования этих операторов? Почему вы хотите использовать их вместо andalso и orelse?

Ответы

Ответ 1

Раньше (до R13A), что andalso и orelse не были хвостовыми рекурсивными. Подробнее см. http://www.erlang.org/eeps/eep-0017.html. Я не думаю, что есть хорошая причина использовать and/or в новых программах.

Ответ 2

Я вижу, как они делают разные вещи и используют их как таковые:

  • and/or как логические операторы, где я хочу сравнить логические значения. Поскольку они строгие, я автоматически получаю проверку типов и я KNOW точно, что было вызвано.
  • andalso/orelse для управления, как && и || в C.

Видимые ошибки определены в erlang. Я чувствую, что хорошо знать, что было выполнено и как оно прошло.

Ответ 3

Операторы и/или просто намного старше. Операторы andalso/orelse являются поздними дополнениями. Вариант использования для и/или сегодня может быть, когда вы просто хотите выполнить некоторые простые логические операции, а горизонтальное пространство более важно, чем, возможно, сэкономить пару машинных циклов. Например:

X = Y and (A or B),

а не

X = Y andalso (A orelse B),

немного легче на глазах.

В целях обратной совместимости было невозможно просто изменить поведение оригинала и/или стать короткозамкнутым, поэтому необходимы новые ключевые слова. Названия andalso/orelse относятся к стандарту ML.