Ответ 1
Раньше (до R13A), что andalso
и orelse
не были хвостовыми рекурсивными. Подробнее см. http://www.erlang.org/eeps/eep-0017.html. Я не думаю, что есть хорошая причина использовать and
/or
в новых программах.
Я изучаю Erlang из веб-книги LearnYouSomeErlang. Одна вещь, которая поразила меня, когда я училась, была недолговечным булевым соединением и операторами дизъюнкции, а именно: and
и or
. Каковы варианты использования этих операторов? Почему вы хотите использовать их вместо andalso
и orelse
?
Раньше (до R13A), что andalso
и orelse
не были хвостовыми рекурсивными. Подробнее см. http://www.erlang.org/eeps/eep-0017.html. Я не думаю, что есть хорошая причина использовать and
/or
в новых программах.
Я вижу, как они делают разные вещи и используют их как таковые:
and
/or
как логические операторы, где я хочу сравнить логические значения. Поскольку они строгие, я автоматически получаю проверку типов и я KNOW точно, что было вызвано.andalso
/orelse
для управления, как &&
и ||
в C.Видимые ошибки определены в erlang. Я чувствую, что хорошо знать, что было выполнено и как оно прошло.
Операторы и/или просто намного старше. Операторы andalso/orelse являются поздними дополнениями. Вариант использования для и/или сегодня может быть, когда вы просто хотите выполнить некоторые простые логические операции, а горизонтальное пространство более важно, чем, возможно, сэкономить пару машинных циклов. Например:
X = Y and (A or B),
а не
X = Y andalso (A orelse B),
немного легче на глазах.
В целях обратной совместимости было невозможно просто изменить поведение оригинала и/или стать короткозамкнутым, поэтому необходимы новые ключевые слова. Названия andalso/orelse относятся к стандарту ML.