РефератыАстрономияФуФункції модифікатора

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

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


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


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


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>.
Якщо 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 <atom>.
Повертає список символів, P - імена кожного з яких складаються з друкованих символів атома <atom>. Якщо <atom> не є атомом, то повертається 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 <list>.
Повертає символ, P - ім’я якого складіється зі счеплених P - імен атомів у списку <list>. Для визначення 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


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


(DEFUN PACK* LST


(PACK LST) )


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


ABC |4QWT|


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


(DEFUN CHAR (atm n)


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


$ (CHAR ‘ABCDE 3) $ (CHAR 12345 0) $ (CHAR ‘qwe 8)


D 1 NIL


5. SUBSTRING <atom> <n> <m>.
Якщо <atom> — символабочисло, <n> та <m> — невід’ємніцілі, n£m, тофункція SUBSTRING повертаєсимвол, P - ім’яякогоскладаєтьсязсимволів P - іменатомапочинаючиз n-огодо m-ого, причомувідліксимволівпочинаєтьсяз 0. Якщо n£0, то вважається що 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 123456 3) $ (SUBSTRING ‘ABCDEFG 0 3)


|456| ABCD


6. STRING<pr> <atom1> <atom2> <flag>
, де <pr> - будь-якийпредикат <, >, <=, >=, =, /=. Відбуваєтьсялексикографічнепорівняння P - іменатомівзгіднозпредикатом <pr>. Якщофлагдорівнює 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 <atom>.
Повертає символ, P - ім’я якого співпадає з P - іменем атома, але всі його літери перетворюються в великі. Якщо <atom> не є атомом, повертається NIL.


$ (STRING-UPCASE “Lisp Is A Language”) $ (STRING-UPCASE ‘(a s d))


|LISP IS A LANGUAGE| NIL


8. STRING-DOWNCASE <atom>.
Повертає символ, P - ім’я якого співпадає з P - іменем атома, але всі його літери перетворюються в маленькі. Якщо <atom> не є атомом, повертається 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 <atom1> <atom2> <n>.
Повертає номер позиції першого входження P - імені атома1 в P - ім’я атома2. Якщо <n> - ноль або додатне ціле, пошук починається з 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 <atom>.
Повертаєкількістьсимволівв P - іменіатомазурахуваннямзначеньконтрольнихзмінних *PRINT-BASE* та *PRINT-ESCAPE*.


$ (DEFUN PRINT-LENGTH (atm)


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


$ (PRINT-LENGTH ‘Mulisp)


6


$ (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 1222334)


(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) )

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Функції модифікатора

Слов:1490
Символов:11125
Размер:21.73 Кб.