Что расходится в Лисп
Например,
(cond ((<2 1) 2) ((<1 2) 1)) имеет значение 1. ОК;
Но я видел это (cond (diverge 1) (ture 0))
не определено, если отклонение не заканчивается 'в моей главной книге.
Что расходится в Лисп??
Я этого не знаю
Кроме того, я точно не знаю, что такое побочные эффекты в Лиспе.
2 ответа
Предполагая, что код, который вы изначально имели в виду
(cond ((diverge 1) (ture 0)))
тогда результат этого выражения не определен (или лучше, тоже расходится), когда мы предполагаем diverge
быть - как следует из названия - расходящаяся операция.
Расходящаяся операция - это операция, которая не сходится к результату, как, например, бесконечный цикл.
Нет никаких diverge
определенный в стандарте Common Lisp (какова практическая цель?), поэтому ваша книга просто опускает "детали реализации" расходящихся вычислений, заключая их в операцию и присваивая ей соответствующее имя.
Обратите внимание, что оригинальный код может демонстрировать то же поведение, если предположить, diverge
быть символом макроса.
Как показано, diverge
а также ture
назовет переменные, которые оцениваются как логические. Значение всего выражения равно 1, если diverge
верно, 0, если ture
это правда, и nil
если ни то, ни другое не соответствует действительности.
Так как вы не показали контекст, особенно как diverge
а также ture
связаны, больше нельзя сказать о вашем фрагменте.
Может быть, вы имели в виду что-то вроде (cond ((diverge 1) (ture 0)))
, затем diverge
будет оператором. Он не определен в стандарте Common Lisp, поэтому он, скорее всего, откуда-то еще в вашей книге.