Процедуры в Лиспе
Что бы произошло, если бы я определил следующую процедуру в Лиспе:(define (p) (p)) Какое значение она вернула бы? Я не новичок в программировании, но я читаю эту книгу, которая более глубока и использует Lisp для примеров, и эта запутала меня.
1 ответ
При выполнении процедура создаст бесконечный цикл и никогда не вернет значение. Мы определяем рекурсивную процедуру под названием p
чье тело - это зов к себе; потому что нет базового случая, процедура никогда не закончится. В более привычном синтаксисе (скажем, в Python) он такой же:
def p():
return p()
Ваша процедура вызывается в хвостовой позиции, которую Схема может оптимизировать, чтобы использовать постоянный объем пространства, тогда как интерпретатор Python не может выполнить эту оптимизацию и быстро потерпит крах из-за переполнения стека.