WWW.REFERATCENTRAL.ORG.UA - Я ТУТ НАВЧАЮСЬ

... відкритий, безкоштовний архів рефератів, курсових, дипломних робіт

ГоловнаІнформатика, Компютерні науки → Функції планування - Реферат

Функції планування - Реферат

критерій закінчення, або кінець одного зі списків. Наведені далі функції виконують дії предиката над car-об'єктами , ..., , потім - над cadr-об'єктами кожного списку і так далі поки тест не поверне значення, відмінне від NIL, або не зустрінеться кінець списку.
(SOME , , , ..., ). Якщо тест повертає значення, відмінне від 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 , , , ..., ). Якщо тест повертає значення, відмінне від NIL, NOTANY повертає NIL. Якщо зустрінеться кінець списку, повертається Т. Функцію NOTANY можна визначити наступним чином:
(DEFUN NOTANY (TST LST1 LST2)
(NOT (SOME TST LST1 LST2)) )
$ (NOTANY 'EQL '(DOG CAT COW) '(COW CAT DOG))
NIL
$ (NOTANY 'ODDP (LIST 0 (+3 3) 7/2))
T
(EVERY , , , ..., ). Якщо тест видає NIL, EVERY повертає NIL. Якщо зустрінеться кінець списку, EVERY повертає Т. Функцію EVERY можна визначити наступним чином:
(DEFUN EVERY (TST LST1 LST2)
(LOOP
((OR (NULL LST1) (NULL LST2)) NIL)
((NOT (FUNCALL TST (POP LST1) (POP LST2))) T) )
$ (EVERY 'EQL '(DOG CAT COW) '(DOG CAT PIG))
NIL
$ (EVERY 'ODDP (LIST 3 5 7 11 13))
T
(NOTEVERY , , ,..., ). Якщо тест повертає NIL, NOTEVERY повертає Т. Якщо зустрінеться кінець спискy, NOTEVERY повертає NIL. Функцію NOTEVERY можна визначити наступним чином:
(DEFUN NOTEVERY (TST LST1 LST2)
(NOT (EVERY TST LST1 LST2)) )
$ (NOTEVERY 'EQL '(DOG CAT COW) '(DOG CAT PIG))
T
$ (NOTEVERY 'STRING< '(BILL JACK JOE) '(BUD JIM SUE))
NIL
(REDUCE ) перетворює значення елементів до простого значення, використовуючи - функцію двох аргументів. Перетворення відбувається у відповідності з початковим значенням зліва направо. По замовченню початковим значенням для операції + є 0, для * є 1.
$ (REDUCE 'CONS '(A B C D)) $ (REDUCE '* '(2 3 5 7)) $ (REDUCE '+ NIL)
(((A . B) . C) . D) 210 0
$ (REDUCE '* '(2 3 5 7) -2) $ (REDUCE '* NIL)
-420 1
Розглянемо задачу транспонування матриці, поданої у вигляді складного списку. Функція TRANS транспонує матрицю.
(DEFUN TRANS (matr)
((EVERY 'NULL matr) NIL)
(CONS (MAPCAR 'CAR matr) (TRANS (MAPCAR 'CDR matr))) )
Розглянемо роботу функції TRANS на прикладі по крокам:
(TRANS '((1 2 3)(4 5 6)(7 8 9)))
(CONS '(1 4 7) (TRANS '((2 3)(5 6)(8 9))))
(CONS '(1 4 7) (CONS '(2 5 8) (TRANS '((3)(6)(9)))))
(CONS '(1 4 7) (CONS '(2 5 8) (CONS '(3 6 9) (TRANS '( () () () )))))
(CONS '(1 4 7) (CONS '(2 5 8) (CONS '(3 6 9) NIL)))
(CONS '(1 4 7) (CONS '(2 5 8) '((3 6 9)) ))
(CONS '(1 4 7) '((2 5 8) (3 6 9)) )
((1 4 7)(2 5 8)(3 6 9))
Далі напишемо функцію MULT - множення двох матриць. Але спочатку напишемо декілька допоміжних функцій.
Функція SCALAR знаходить скалярний добуток двох векторів, представлених списками x та y.
(DEFUN SCALAR (x y) $ (SCALAR '(1 2 3) '(4 5 6))
(APPLY '+ (MAPCAR '* x y)) 32
Функція MULT2 будує список скалярних добутків вектора x на елементи списку y, які є векторами
(DEFUN MULT2 (x y)
(MAPCAR 'SCALAR (MAKE-LIST (LENGTH x) x) y) )
$ (MULT2 '(1 2 3) '((1 2 3)(4 5 6)(7 8 9)))
(14 32 50)
Функція MULT1 утворює список списків скалярних добутків усіх можливих елементів x та y.
(DEFUN MULT1 (x y)
(MAPCAR 'MULT2 x (MAKE-LIST (LENGTH y) y)) )
$ (MULT1 '((1 2 3)(4 5 6)(7 8 9)) '((1 2 3)(4 5 6)(7 8 9)))
((14 32 50) (32 77 122) (50 122 194))
(DEFUN MULT (x y)
(MULT1 x (TRANS y)) )
$ (MULT '((1 2 3)(4 5 6)(7 8 9)) '((1 2 3)(4 5 6)(7 8 9)))
((30 36 42) (66 81 96) (102 126 150))
Завдання
1. Знайти кількість атомів у списку з підсписками.
2. Знайти глибину списку з підсписками.
3. Знайти найбільший (найменший) елемент у списку з підсписками.
4. Вважаючи що вхідний складний список є дерево гри (елементи якого мість лише числа), написати функцію міні-максного пошуку.
5. Лінеризувати список.
6. За вхідною матрицею m*n утворити списки x1x2...xn, де xi - сума чисел i-ого стовпчика та y1y2...yn, де yi - сума чисел i-ого рядка.
7. Написати функцію rev обернення списку з підсписками.
8. Знайти суму чисел матриці.
Відповіді
1. $ (DEFUN catom (s)
((ATOM s) 1)
(APPLY '+ (MAPCAR 'catom s)) )
2. $ (DEFUN depth (s)
((ATOM s) 0)
(ADD1 (APPLY 'MAX (MAPCAR 'depth s))) )
3. $ (DEFUN biggest (s)
((ATOM s) s)
(APPLY 'MAX (MAPCAR 'biggest s)) )
4. $ (DEFUN big1 (s) (DEFUN sm1 (s)
((ATOM s) s) ((ATOM s) s)
(APPLY 'MAX (MAPCAR 'sm1 s)) ) (APPLY 'MIN (MAPCAR 'big1 s)) )
5. $ (DEFUN lin (s)
((ATOM s) (LIST s))
(MAPCAN 'lin s))
6. $ (DEFUN sum (matr)
((EVERY 'NULL matr) NIL)
(CONS (APPLY '+ (MAPCAR 'CAR matr)) (sum (MAPCAR 'CDR matr))) )
$ (DEFUN sumr (matr)
((EVERY 'NULL matr) NIL)
(CONS (APPLY '+ (CAR matr)) (sumr (CDR matr))) )
7. $ (DEFUN rev (lst)
((ATOM lst) lst)
(REVERSE (MAPCAR 'rev lst)) )
8. $ (DEFUN SUMatom (s)
((ATOM s) s)
(APPLY '+ (MAPCAR 'SUMatom s)) )
Loading...

 
 

Цікаве