Инструменты пользователя

Инструменты сайта


examination:flp:question33

Итерация и рекурсия в РС – Лиспе.

В «чистом» функциональном Лиспе нет ни циклических предложений (DO, PROG и другие), ни тем более операторов передачи управления. Для программирования повторяющихся вычислений в нем используются лишь условные предложения и определения рекурсивных, или вызывающих самих себя, функций. 

Например, рекурсивный вариант функции ЕХРТ можно было бы определить так: 

(defun expt4 (x n) 
           (if (= n 1) x 
           (* x (expt4 x (- n 1)))))

Функция ЕХРТ4 вызывает себя до тех пор, пока используемый как счетчик аргумент n не уменьшится до единицы, т.е. всего n-1 раз. После этого в качестве результата вызова функции ЕХРТ4 возвращается значение x. При каждой передаче значения на предыдущий уровень результат умножается на x. Так x окажется перемноженным на себя n раз. 

Рекурсивное определение функции ЕХРТ короче и в большей степени отражает суть функции, чем версии, основанные на DO и PROG. 

examination/flp/question33.txt · Последние изменения: 2014/01/15 08:17 (внешнее изменение)