Термінова допомога студентам
Дипломи, курсові, реферати, контрольні...

Функції модифікатора

РефератДопомога в написанніДізнатися вартістьмоєї роботи

RPLACD <�об'єкт1> <�об'єкт2>. Відбувається заміна CDR-елемента об'єкта1 вказівником на об'єкт2, повертається модифікований об'єкт. RPLACA та RPLACD є основними функціями, які змінюють фізичну структуру списків. Їх можна представити через узагальнену функцію присвоєння SETF: PACK. Повертає символ, P — ім'я якого складіється зі счеплених P — імен атомів у списку. Для визначення P — імен чисел… Читати ще >

Функції модифікатора (реферат, курсова, диплом, контрольна)

Реферат на тему:

Функції модифікатора.

Функції модифікатора виконують переадресацію вказівників в структурах даних мови програмування Лісп.

1. RPLACA <�об'єкт1> <�об'єкт2>.

Відбувається заміна CAR-елемента об'єкта1 вказівником на об'єкт2, повертається модифікований об'єкт.

Якщо об'єкт1 — список, то перший елемент списка замінюється на об'єкт2.

Якщо об'єкт1 — бінарне дерево, то його лівий син замінюється на об'єкт2.

Якщо об'єкт1 — символ (aле не NIL), то символ приймає значення об'єкт2.

$ (SETQ a ‘(a b c d)) $ (SETQ b ‘((1. 2). (3. 4))) $ (SETQ s ‘d).

$ (RPLACA a ‘(11 12)) $ (RPLACA b 5) $ (RPLACA s ‘g).

((11 12) b c d) (5. (3. 4)) Val (s)=d, Val (d) = g.

2. RPLACD <�об'єкт1> <�об'єкт2>. Відбувається заміна CDR-елемента об'єкта1 вказівником на об'єкт2, повертається модифікований об'єкт. RPLACA та RPLACD є основними функціями, які змінюють фізичну структуру списків. Їх можна представити через узагальнену функцію присвоєння SETF:

(RPLACA x y) — це (SETF (CAR x) y).

(RPLACD x y) — це (SETF (CDR x) y).

3. NSUBSTITUTE <�новий><�старий> <�список> <�тест>. Модифікуються конси найвищого рівня списку. Старі елементи замінюються на нові на нульовому рівні вкладеності, для яких перевірка по тесту не дорівнює NIL. Якщо тест не вказано, то по замовченню тест = EQL.

$ (NSUBSTITUTE 1 3 ‘(4 5 6 (3 3 4 5) 3 4 1)).

(4 5 6 (3 3 4 5) 1 4 1).

$ (NSUBSTITUTE 10 5 ‘(4 5 6 3 4 1) >).

(10 5 6 10 10 10).

$ (NSUBSTITUTE 10 5 ‘(4 5 6 3 4 1) <).

(4 5 10 3 4 1).

4. NSUBST <�новий><�старий> <�список> <�тест>. Функція працює як і NSUBSTITUTE, але модифікуються конси всіх рівнів списку.

$ (NSUBST 1 3 ‘(4 5 6 (3 3 4 5) 3 4 1)).

(4 5 6 (1 1 4 5) 1 4 1).

5. DELETE <�елемент> <�список> <�тест>. Вилучає зі списку всі елементи, для яких ознака перевірки за тестом не дорівнює NIL.

$ (DELETE 3 ‘(1 2 3 4 3 2 1)).

(1 2 4 2 1).

6. NREVERSE <�список> <�об'єкт>. Обертає елементи списку, зчеплених з об'єктом.

$ (NREVERSE ‘(a b c d)) $ (NREVERSE ‘(1 2 3 (1 2 3) 4 5 6) ‘(1 2 3)).

(d c b a) (6 5 4 (1 2 3) 3 2 1 1 2 3).

7. NBUTLAST <�список>. Якщо n — нуль або додатне ціле, то функція NBUTLAST повертає список без n останніх елементів (відбувається заміна n-го конса, взятого з кінця списку на NIL). Якщо другий аргумент не вказано, то за замовченням n=1.

$ (NBUTLAST ‘(a b c d e)) $ (NBUTLAST ‘(a b c d e) 3).

(a b c d) (a b).

8. NCONC <�список1> <�список2> … <�списокN>. Повертається список, який складається з елементів списків — аргументів у вказаному порядку. Відбувається модифікація останніх CDR-елементів списків. Якщо виконати команду (NCONC list list), де list — будь-який список, то результатом буде циркулянтний список, процес побудови якого буде нескінченним.

$ (NCONC ‘(1 2) ‘(3 4) ‘(5 6 7)).

(1 2 3 4 5 6 7).

9. SPLIT <�список>. Розбиває список на два списки посередині. Значенням списку стає його перша половина. Функція SPLIT повертає другу половину списку.

$ (SETQ a ‘(1 2 3 4 5 6)) $ a.

$ (SPLIT a) (1 2 3).

(4 5 6).

10. SORT <�список> <�тест>. Сортуються елементи списку на основі тесту.

$ (SORT ‘(2 5 3 4 1 6 8 9 7) >).

(9 8 7 6 5 4 3 2 1).

4.7. Функції рядків Функції рядків призначені для роботи з текстами. Вони забезпечують виконання великої кількості операцій над текстовими данними — порівняння, пошуку та перетворення P — імен символів та чисел. P — ім'я числа змінюється у відповідності до поточної системи числення (значення змінної *PRINT-BASE*).

1. UNPACK. Повертає список символів, P — імена кожного з яких складаються з друкованих символів атома. Якщо не є атомом, то повертається NIL.

(DEFUN UNPACK (ATM).

((SYMBOLP ATM) (список символів, P — імена яких складаються з друкованих символів атома ATM)).

((NUMBERP ATM) (список символів, P — імена яких складаються з цифр атома ATM))).

$ (UNPACK ‘abcde) $ (UNPACK 216) $ (SETQ *PRINT-BASE 16*).

(a b c d e) (2 1 6) $ (UNPACK 216).

(D 8).

2. PACK. Повертає символ, P — ім'я якого складіється зі счеплених P — імен атомів у списку. Для визначення P — імен чисел використовується поточна система числення. Функція PACK завжди повертає символ, навіть якщо P — ім‘я складається тільки з однозначних чисел.

(DEFUN PACK (LST).

((ATOM LST) «»).

((SYMBOLP (CAR LST)) (символ, P — ім'я якого складається з P — імені (CAR LST), сполучене з (PACK (CDR LST)))).

((NUMBERP (CAR LST)) (символ, P — ім'я якого складається з цифр у друкованому представлені (CAR LST), сполучене з (PACK (CDR LST)))).

(PACK (CDR LST))).

$ (PACK ‘(a b c d e) $ (PACK ‘(7 3 1) $ (PACK ‘(Q 7 A 1)).

abcde |731| Q7A1.

$ (PACK ‘(23 56) $ (PACK «(«» 3 ||)).

|2356| 3.

i.

T.

l.

p.

r.

x.

x20AC.

".

†.

x0152.

'.

".

Z.

i.

i.

T.

V.

tomN>. Повертає символ, P-ім'я якого складається зі счеплених P-імен атомів. Ця функція є вузькою версією PACK, оскільки вона працює не зі списком атомів, а з будь-якою кількістю атомів.

(DEFUN PACK* LST.

(PACK LST)).

$ (PACK* ‘a ‘b ‘c) $ (PACK 4 ‘QW ‘T).

ABC |4QWT|.

4. CHAR. Якщо — символ або число, а — невід'ємне ціле число, функція CHAR повертає символ, P — ім'я якого є n-ий символ P — імені, причому відлік символів починається з 0. Функція повертає NIL якщо не ноль і не додатне ціле число, або якщо P — ім'я атома містить меньш ніж n символів.

(DEFUN CHAR (atm n).

((ATOM atm) (NTH n (UNPACK atm)))).

$ (CHAR ‘ABCDE 3) $ (CHAR 12 345 0) $ (CHAR ‘qwe 8).

D 1 NIL.

5. SUBSTRING. Якщо — символ або число, та — невід'ємні цілі, nxF0A3m, то функція SUBSTRING повертає символ, P — ім'я якого складається з символів P — імен атома починаючи з n-ого до m-ого, причому відлік символів починається з 0. Якщо nxF0A30, то вважається що n=0. Якщо m не вказано, або меньше за 0 чи більше за кількість символів в P — імені атома, m вважається рівним кількості символів в P — імені атома. Якщо n>m повертається NIL.

(DEFUN SUBSTRING (atm n m).

((AND (ATOM atm) (INTEGERP n)).

((MINUSP n) (SUBSTRING atm 0 m)).

(PACK (SUBLIST (UNPACK atm) n m)).

$ (SUBSTRING ‘ABCDEFG 2 4) $ (SUBSTRING ‘ABCDEFG 3).

CDE DEFG.

$ (SUBSTRING 123 456 3) $ (SUBSTRING ‘ABCDEFG 0 3).

|456| ABCD.

6. STRING, де — будь-який предикат <, >, <=, >=, =, /=. Відбувається лексикографічне порівняння P — імен атомів згідно з предикатом. Якщо флаг дорівнює NIL, порівняння відбувається з врахуванням регістру. Якщо флаг не задано, він вважається рівним T. Функція STRING= повертає або T або NIL. Інші функції повертають або NIL, або номер позиції першого символа, починаючи з якого P — імена не співпадають.

$ (STRING= ‘ABC ‘ABC) $ (STRING ‘ABC ‘ABC NIL).

T T.

$ (STRING= ‘Abc ‘AbC) $ (STRING= ‘Abc ‘AbC NIL).

T NIL.

$ (STRING= |100| 100) $ (STRING< ‘ABC ‘AZC).

T 1.

$ (STRING< ‘AZC ‘ABC) $ (STRING>= ‘123 ‘123).

NIL 3.

7. STRING-UPCASE. Повертає символ, P — ім'я якого співпадає з P — іменем атома, але всі його літери перетворюються в великі. Якщо не є атомом, повертається NIL.

$ (STRING-UPCASE «Lisp Is A Language») $ (STRING-UPCASE ‘(a s d)).

|LISP IS A LANGUAGE| NIL.

8. STRING-DOWNCASE. Повертає символ, P — ім'я якого співпадає з P — іменем атома, але всі його літери перетворюються в маленькі. Якщо не є атомом, повертається NIL.

$ (string-upcase |This is A TEXT|) $ (string-downcase |This is A TEXT|).

|THIS IS A TEXT| |this is a text|.

$ (STRING-UPCASE ‘i) $ (STRING-DOWNCASE ‘I).

I i.

9. FINDSTRING. Повертає номер позиції першого входження P — імені атома1 в P — ім'я атома2. Якщо — ноль або додатне ціле, пошук починається з n-ого символа атома2. Якщо P — ім'я атома1 не знайдено, повертається NIL.

(DEFUN FINDSTRING (ATM1 ATM2 N).

((OR (NOT (ATOM ATM1)) (NOT (ATOM ATM2))) NIL).

((PLUSP N).

((NULL (FINDSTRING ATM1 (SUBLIST ATM2))) NIL).

(+ N (FINDSTRING ATM1 (SUBLIST ATM2 N)))).

((якщо ATM1 є підрядком ATM2).

(позиція ATM1, на якій воно вперше зустрічається у ATM2))).

$ (FINDSTRING ‘BC ‘ABCDEFG) (FINDSTRING ‘abc ‘abdeabcde).

1 4.

10. PRINT-LENGTH. Повертає кількість символів в P — імені атома з урахуванням значень контрольних змінних *PRINT-BASE* та *PRINT-ESCAPE*.

$ (DEFUN PRINT-LENGTH (atm).

((ATOM atm) (LENGTH (UNPACK atm))).

$ (PRINT-LENGTH ‘Mulisp).

$ (PRINT-LENGTH -156) $ (PRINT-LENGTH NIL).

4 3.

Розглянемо функцію, яка для заданого атома знаходить максимальну кількість літер, яка в ньому йде підряд. Повернути конс, який складається з літери та числа. Наприклад, для атома a22eeerty повернути (e. 3).

(DEFUN symmax (atm) $ (symmax ‘a22eeerty).

((NOT (ATOM atm)) NIL) (e. 3).

(SETQ lst (UNPACK atm) endel (ASCII 0) endct 0) $ (symmax ‘nil).

(LOOP (n. 1).

((NULL lst)) $ (symmax 1 222 334).

(SETQ el (CAR lst) ct 0) (2. 3).

(LOOP.

((NOT (EQL (CAR lst) el))).

(POP lst).

(INCQ ct)).

(IF (> ct endct) (SETQ endct ct endel el))).

(CONS endel endct)).

Показати весь текст
Заповнити форму поточною роботою