Массив умножения (управляющие структуры) - Lisp
Формулировка задачи:
Помогите разработать функцию с применением управляющих конструкций:
DO "с телом", DO "без тела", LOOP, PROG и рекурсии.
где - обозначение массива умножения.
Считать первую отметку от i = 1 до i = M, вторую - от j = 1 до j = N.
И пример работы для другой формулы:
Сначала необходимо разработать функцию расчета заданной формулы.
Далее необходимо разработать функцию расчета внутреннего цикла с применением предыдущей функции и без применения. В конечном варианте разработать функцию двойного цикла с применением предыдущих разработанных функций и без их применения.
(defun sum (i N a b) ((< N 0) 0) (+(expt (+(a a) (b b)) (- i N)) (sum i (- N 1) a b) ) )
Решение задачи: «Массив умножения (управляющие структуры)»
textual
Листинг программы
(defun task (n m) (let ((p 1)) (do ((i 1 (+ i 1))) ((> i n)) (do ((j 1 (+ j 1))) ((> j m)) (setq p (* p (/ i (^ j i)))))) p)) ==> task (task 3 5) ==> 1/384000000 ;; В HomeLisp последней версии можно так: (defun ta (n m) (iter (for i from 1 to n) (iter (for j from 1 to m) (multiplying (/ i (^ j i))))))
Объяснение кода листинга программы
В коде определена функция с именем task, которая принимает два аргумента n и m. Внутри функции используется оператор let, чтобы создать переменную p со значением 1. Затем используется цикл do, который выполняется, пока значение i меньше n. Внутри этого цикла используется еще один цикл do, который выполняется, пока значение j меньше m. Внутри этого вложенного цикла выполняется операция умножения p на значение i, деленное на значение j, возведенное в степень i. Затем значение p обновляется результатом этой операции. В конце функции возвращается значение p. При вызове функции task с аргументами 3 и 5, результатом будет 1/384000000.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д