Процедуры в Лиспе

Что бы произошло, если бы я определил следующую процедуру в Лиспе:(define (p) (p)) Какое значение она вернула бы? Я не новичок в программировании, но я читаю эту книгу, которая более глубока и использует Lisp для примеров, и эта запутала меня.

1 ответ

При выполнении процедура создаст бесконечный цикл и никогда не вернет значение. Мы определяем рекурсивную процедуру под названием p чье тело - это зов к себе; потому что нет базового случая, процедура никогда не закончится. В более привычном синтаксисе (скажем, в Python) он такой же:

def p():
    return p()

Ваша процедура вызывается в хвостовой позиции, которую Схема может оптимизировать, чтобы использовать постоянный объем пространства, тогда как интерпретатор Python не может выполнить эту оптимизацию и быстро потерпит крах из-за переполнения стека.

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