Как написать цикл? - Lisp
Формулировка задачи:
Помогите пожалуйста
Решение задачи: «Как написать цикл?»
textual
Листинг программы
(defun f (i) (cond ((= i 1) 1) ((= i 10) 1) ((and (>= i 2) (<= i 9)) (* 2 (sqrt (* i (f (- i 1)) 0.25)))) ((and (>= i 11) (<= i 20)) (* (f (- i 1)) (log i) 0.125)))) ==> F (f 1) ==> 1 (f 2) ==> 1.4142135623731 (f 3) ==> 2.05976714390712 (f 13) ==> 2.98503291022773E-02 (f 20) ==> 2.03727071735139E-05
Объяснение кода листинга программы
В коде представлен функциональный алгоритм вычисления числа F(i) на основе функции Фибоначчи. Цикл реализуется с помощью условной конструкции cond.
- (defun f (i) — определение функции с именем f, принимающей один аргумент i)
- (cond ((= i 1) 1) — проверка условия: если i равно 1, то возвращаем 1)
- ((= i 10) 1) — проверка условия: если i равно 10, то возвращаем 1)
- ((and (>= i 2) (<= i 9)) ( 2 (sqrt ( i (f (- i 1)) 0.25)))) — проверка условия: если i больше или равно 2 и меньше или равно 9, то возвращаем результат вычисления числа F(i) по формуле F(i) = 2 sqrt(i (F(i-1))^2 * 0.25))
- ((and (>= i 11) (<= i 20)) ( (f (- i 1)) (log i) 0.125)) — проверка условия: если i больше или равно 11 и меньше или равно 20, то возвращаем результат вычисления числа F(i) по формуле F(i) = (F(i-1)) log(i) * 0.125))
- (f 1) — вызов функции f с аргументом 1
- (f 2) — вызов функции f с аргументом 2
- (f 3) — вызов функции f с аргументом 3
- (f 13) — вызов функции f с аргументом 13
- (f 20) — вызов функции f с аргументом 20 Таким образом, в коде представлен цикл, который выполняется с помощью условной конструкции cond. В результате выполнения цикла, на каждой итерации вызывается функция f с соответствующим аргументом, значение которого меняется от 1 до 20.