Как написать цикл? - 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.

  1. (defun f (i) — определение функции с именем f, принимающей один аргумент i)
  2. (cond ((= i 1) 1) — проверка условия: если i равно 1, то возвращаем 1)
  3. ((= i 10) 1) — проверка условия: если i равно 10, то возвращаем 1)
  4. ((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))
  5. ((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))
  6. (f 1) — вызов функции f с аргументом 1
  7. (f 2) — вызов функции f с аргументом 2
  8. (f 3) — вызов функции f с аргументом 3
  9. (f 13) — вызов функции f с аргументом 13
  10. (f 20) — вызов функции f с аргументом 20 Таким образом, в коде представлен цикл, который выполняется с помощью условной конструкции cond. В результате выполнения цикла, на каждой итерации вызывается функция f с соответствующим аргументом, значение которого меняется от 1 до 20.

Оцени полезность:

10   голосов , оценка 4.1 из 5