Засоби та принципи програмування на Ліспі, Детальна інформація

Засоби та принципи програмування на Ліспі
Тип документу: Реферат
Сторінок: 7
Предмет: Комп`ютерні науки
Автор: Олексій
Розмір: 12.9
Скачувань: 1188
for i := 0 to k do

for j := 0 to l do

c[i+j] := c[i+j] + a[i] * b[j];

Масиви коефіцієнтів многочлена представлятимемо списком відповідної довжини. Нехай lst1 та lst2 — списки коефіцієнтів заданих в умові многочленів. Нехай функція (MULTPOL lst1 lst2) повертає список коефіцієнтів добутку вихідних многочленів. Наприклад, вихідні многочлени (x3+2x2+1) та (x2-4x-1) зададуться списками lst1 = (1 2 0 1), lst2 = (1 -4 -1). Результатом їх множення буде многочлен x5 - 2x4 - 9x3 - x2 - 4x -1, який представиться списком lst3 = (1 -2 -9 -1 -4 -1). Спочатку нам необхідно знайти значення k та l (якщо ми не передаємо їх як аргументи). Для цього необхідно просто знайти довжину списків lst1 та lst2. Це зробить функція (LENGTH lst):

(DEFUN LENGTH (lst) (DEFUN GEN0 (n)

((NULL lst) 0) ((ZEROP n) NIL)

(+ 1 (LENGTH (CDR lst))) ) (CONS 0 (GEN0 (- n 1))) )

Знаючи довжини списків lst1 та lst2 (k та l відповідно), ми знаємо довжину результуючого списку lst3 (m=k+l). Необхідно згенерувати список lst3, який складається з m елементів, кожний з яких дорівнює 0. Це зробить функція (GEN0 n).

Функція (mas lst n) повертає n-ий елемент списку lst. Функція (CHANGE lst n value) повертає список lst, в якому n-ий елемент набув значення value.

(DEFUN MAS (lst n)

((ZEROP n) (CAR lst))

(MAS (CDR lst) (- n 1)) )

(DEFUN CHANGE (lst n value)

((ZEROP n) (POP lst) (PUSH value lst))

(CONS (CAR lst) (CHANGE (CDR lst) (- n 1) value)) )

Тоді функція MULTPOL, яка написана на Паскалі, на Ліспі набуває наступного вигляду:

(DEFUN MULTPOL (lst1 lst2)

(SETQ k (LENGTH lst1) l (LENGTH lst2) lst3 (GEN0 (+ k l)))

(SETQ i 0)

(POP lst3)

(LOOP

((= i k) lst3)

(SETQ j 0)

(LOOP

((= j l))

(SETQ lst3 (CHANGE lst3 (+ i j) (+ (MAS lst3 (+ i j)) (* (MAS lst1 i) (MAS lst2 j)))) )

(INCQ j) )

(INCQ i) ) )

3/4

U

The online video editor trusted by teams to make professional video in minutes