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



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)

(\0 \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



3. PACK* ... . Повертає символ, 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 12345 0) $ (CHAR ‘qwe 8)

D \1 NIL



5. SUBSTRING . Якщо — символ або число, та — невід’ємні цілі, 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 , де - будь-який предикат <, >, <=, >=, =, /=. Відбувається лексикографічне порівняння 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)

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) )
Случайные рефераты:
Реферати - Михайло Михайлович Коцюбинський
Реферати - Життя і творчість Дмитра Павличка
Реферати - Микола Хвильовий
Реферати - Життя на творчість Івана Багряного
Реферати - Життя та творчість Ольги Кобилянської
Реферати - Життєвий і творчий шлях Ліни Костенко
Реферати
  • Всі реферати
  • Архітектура
  • Астрономія, авіація
  • Аудит
  • Банківська справа
  • Безпека життєдіяльності
  • Біографія, автобіографія
  • Біологія
  • Бухгалтерський облік
  • Військова кафедра
  • Географія
  • Геологія
  • Гроші і кредит
  • Державне регулювання
  • Діловодство
  • Екологія
  • Економіка підприємства
  • Економічна теорія
  • Журналістика
  • Іноземні мови
  • Інформатика, програмування
  • Історія всесвітня
  • Історія України
  • Історія економічних вчень
  • Краєзнавство
  • Кулінарія
  • Культура
  • Література
  • Макроекономіка
  • Маркетинг
  • Математика
  • Медицина та здоров'я
  • Менеджмент
  • Міжнародні відносини
  • Мікроекономіка
  • Мовознавство
  • Педагогіка
  • Підприємництво
  • Політологія
  • Право
  • Релігієзнавство
  • Промисловість
  • Сільське господарство
  • Сочинения на русском
  • Соціологія
  • Литература на русском
  • Страхування
  • Твори
  • Фізика
  • Фізична культура
  • Філософія
  • Фінанси
  • Хімія
  • Цінні папери
  • Логіка
  • Туризм
  • Психологія