LINUX.ORG.RU

История изменений

Исправление theNamelessOne, (текущая версия) :

слово «рекурсивно» относится тут к вызовам и к операторам.

Внезапно, в лиспе нет разницы между функциями и операторами.

В LISP'е нет рекурсивного вычисления тривиальных операторов.

Не распарсил.

Т.е. функция в LISP'е НЕ производит вычисления над данными в момент своего вызова.

Ложь. В лиспе аппликативный порядок вычисления. Если бы это было не так, тогда такой код выполнялся бы без ошибок:

* (defun foo (a b) (if a a b))

FOO
* (foo t (/ 1 0))

debugger invoked on a DIVISION-BY-ZERO in thread
#<THREAD "initial thread" RUNNING {1002998D53}>:
  arithmetic error DIVISION-BY-ZERO signalled
Operation was SB-KERNEL::DIVISION, operands (1 0).

Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [ABORT] Exit debugger, returning to top level.

(SB-KERNEL::INTEGER-/-INTEGER 1 0)
0] 

Исходная версия theNamelessOne, :

слово «рекурсивно» относится тут к вызовам и к операторам.

Внезапно, в лиспе нет разницы между функциями и операторами.

В LISP'е нет рекурсивного вычисления тривиальных операторов.

Не распарсил.

Т.е. функция в LISP'е НЕ производит вычисления над данными в момент своего вызова.

Ложь. В лиспе аппликативный порядок вычисления. Если бы это было не так, тогда такой код выполнялся бы без ошибок:

* (defun foo (a b) (if a a b))

FOO
* (foo t (/ 1 0))

debugger invoked on a DIVISION-BY-ZERO in thread
#<THREAD "initial thread" RUNNING {1002998D53}>:
  arithmetic error DIVISION-BY-ZERO signalled
Operation was SB-KERNEL::DIVISION, operands (1 0).

Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [ABORT] Exit debugger, returning to top level.

(SB-KERNEL::INTEGER-/-INTEGER 1 0)
0]