Функції планування, Детальна інформація
Функції планування
MAP - функціонали не підвищують обчислювальну потужність Ліспу, але є зручними засобами у програмуванні. Як ми побачили, в якості першого їх аргументу є функція. В залежності від арності цієї функції, після функціонального аргумента йде відповідна кількість аргументів - списків. Якщо списки різні по довжині, то кількість повторень визначається довжиною найбільш короткого списка.
I
u
H
n
x
U
TH
e
p
r
Ue
планування на прикладі задачі додавання двох матриць. Функція vectorsum знаходить вектор, який дорівнює сумі її двох аргументів - векторів. Функція ADDMATR знаходить суму двох матриць.
(DEFUN vectorsum (x y) (DEFUN addmatr (x y)
(MAPCAR '+ x y)) (MAPCAR 'vectorsum x y))
$ (addmatr '((1 2 3)(4 5 6)(7 8 9)) '((1 1 1)(2 2 2)(3 3 3)))
$ ((2 3 4) (6 7 8) (10 11 12))
Наступні предикати планування виконують тестові функції над елементами одного чи декількох списків поки не зустрінеться або критерій закінчення, або кінець одного зі списків. Наведені далі функції виконують дії предиката <тест> над car-об’єктами <списку1>, ..., <спискуN>, потім - над cadr-об’єктами кожного списку і так далі поки тест не поверне значення, відмінне від NIL, або не зустрінеться кінець списку.
(SOME <тест>, <список1>, <список2>, ..., <списокN>). Якщо тест повертає значення, відмінне від NIL, SOME повертає це значення. Якщо кінець списку досягнуто, SOME повертає NIL. Функцію SOME можна визначити наступним чином:
(DEFUN SOME (TST LST1 LST2)
(LOOP
((OR (NULL LST1) (NULL LST2)) NIL)
((FUNCALL TST (POP LST1) (POP LST2))) ) )
$ (SOME 'EQL '(DOG CAT COW) '(COW CAT DOG))
T
$ (SOME 'PLUSP (LIST 0 -3 -4 -6))
NIL
(NOTANY <тест>, <список1>, <список2>, ..., <списокN>). Якщо тест повертає значення, відмінне від NIL, NOTANY повертає NIL. Якщо зустрінеться кінець списку, повертається Т. Функцію NOTANY можна визначити наступним чином:
(DEFUN NOTANY (TST LST1 LST2)
(NOT (SOME TST LST1 LST2)) )
I
u
H
n
x
U
TH
e
p
r
Ue
планування на прикладі задачі додавання двох матриць. Функція vectorsum знаходить вектор, який дорівнює сумі її двох аргументів - векторів. Функція ADDMATR знаходить суму двох матриць.
(DEFUN vectorsum (x y) (DEFUN addmatr (x y)
(MAPCAR '+ x y)) (MAPCAR 'vectorsum x y))
$ (addmatr '((1 2 3)(4 5 6)(7 8 9)) '((1 1 1)(2 2 2)(3 3 3)))
$ ((2 3 4) (6 7 8) (10 11 12))
Наступні предикати планування виконують тестові функції над елементами одного чи декількох списків поки не зустрінеться або критерій закінчення, або кінець одного зі списків. Наведені далі функції виконують дії предиката <тест> над car-об’єктами <списку1>, ..., <спискуN>, потім - над cadr-об’єктами кожного списку і так далі поки тест не поверне значення, відмінне від NIL, або не зустрінеться кінець списку.
(SOME <тест>, <список1>, <список2>, ..., <списокN>). Якщо тест повертає значення, відмінне від NIL, SOME повертає це значення. Якщо кінець списку досягнуто, SOME повертає NIL. Функцію SOME можна визначити наступним чином:
(DEFUN SOME (TST LST1 LST2)
(LOOP
((OR (NULL LST1) (NULL LST2)) NIL)
((FUNCALL TST (POP LST1) (POP LST2))) ) )
$ (SOME 'EQL '(DOG CAT COW) '(COW CAT DOG))
T
$ (SOME 'PLUSP (LIST 0 -3 -4 -6))
NIL
(NOTANY <тест>, <список1>, <список2>, ..., <списокN>). Якщо тест повертає значення, відмінне від NIL, NOTANY повертає NIL. Якщо зустрінеться кінець списку, повертається Т. Функцію NOTANY можна визначити наступним чином:
(DEFUN NOTANY (TST LST1 LST2)
(NOT (SOME TST LST1 LST2)) )
The online video editor trusted by teams to make professional video in
minutes
© Referats, Inc · All rights reserved 2021