Что расходится в Лисп

Например,

(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, поэтому он, скорее всего, откуда-то еще в вашей книге.

Другие вопросы по тегам