Главная » Файлы » Для учня/студента » Інформатика [ Добавить материал ]

Функції рядків Реферат
[ · Скачать удаленно (43.5 Kb) ] 04.08.2010, 14:59
Реферат на тему: Функції рядків Функції рядків призначені для роботи з текстами. Вони забезпечують виконання великої кількості операцій над текстовими данними — порівняння, пошуку та перетворення P - імен символів та чисел. 1. UNPACK . Повертає список символів, P - імена кожного з яких складаються з символів атома . Якщо не є атомом, повертається NIL. $ (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 - ім‘я складається тільки з однозначних чисел. $ (PACK ‘(a b c d e) $ (PACK ‘(\7 \3 \1) $ (PACK ‘(Q \7 \A \1)) abcde |731| Q7A1 3. PACK* ... . Повертає символ, P-ім’я якого складається зі счеплених P-імен атомів. Ця функція є вузькою версією PACK, оскільки вона працює не зі списком атомів, а з будь-якою кількістю атомів. $ (PACK* ‘a ‘b ‘c) $ (PACK 4 ‘QW ‘T) ABC |4QWT| 4. CHAR . Якщо — символ або число, а — невід’ємне ціле число, функція CHAR повертає символ, P - ім’я якого є n-ий символ P - імені , причому відлік символів починається з 0. Функція повертає NIL якщо не ноль і не додатнє ціле число, або якщо P - ім’я атома містить меньш ніж n символів. (DEFUN CHAR (atm n) $ (CHAR ‘ABCDE 3) $ (CHAR 12345 0) ((ATOM atm) D \1 (NTH n (UNPACK atm)) ) ) 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. $ (FINDSTRING ‘BC ‘ABCDEFG) (FINDSTRING ‘abc ‘abdeabcde) 1 4 10. PRINT-LENGTH . Повертає кількість символів в P - імені атома з урахуванням значень контрольних змінних *PRINT-BASE* та *PRINT-ESCAPE*. $ (DEFUN PRINT-LENGTH (atm) $ (PRINT-LENGTH ‘Mulisp) ((ATOM atm) (LENGTH (UNPACK atm))) 6 $ (PRINT-LENGTH -156) $ (PRINT-LENGTH NIL) 4 3 Приклади 1. Написати функцію, яка для заданого атома знаходить максимальну кількість літер, яка в ньому йде підряд. Повернути конс, який складається з літери та числа. Наприклад, для атома 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) ) Робота з файлами По замовченню за пристрій потокового вводу (CIS - Current Input Stream) береться консоль. 1. Для читання даних з вхідного потоку використовують функцію READ. Після виконання команди (SETQ a (READ)) ви повинні ввести з консолі вираз, який буде прочитано та присвоєно змінній а. При цьому якщо буде введено декілька об’єктів, то змінній а буде присвоєно перший об’єкт. Наприклад, якщо ви введете: as bf gh, то змінна a прийме значення as. Якщо Ви хочете ввести список (складний об’єкт), то його необхідно вводити в круглих дужках: (as df gh). 2. Функція (CLEAR-INPUT) чистить буфер вводу. В будь-якому випадку повертається NIL. 3. Функція (READ-LINE) читає елементи з CIS поки не буде прочитано символ переходу на новий рядок (). Повертається символ, Р-ім’я якого складається з усіх прочитаних символів як ті були розташовані у вхідному рядку, окрім . 4. Функція (READ-CHAR) читає наступний елемент з CIS та повертає його. 5. Функція (UNREAD-CHAR) повертає в CIS останній прочитаний символ. 6. Функція (LISTEN) повертає T якщо CIS не порожній, та NIL якщо ми дійшли до кінця файлу. 7. Функції (OPEN-INPUT-FILE “”) та (CLOSE-INPUT-FILE “”) використовуються для відкриття та закриття файла для вводу. 8. Функції (OPEN-OUTPUT-FILE “”) та (CLOSE-OUTPUT-FILE “”) відповідно відкривають та закривають файл для виводу інформації. Приклади 1. Надрукувати кількість літер sym в файлі name. (DEFUN f (name sym) (SETQ a (READ)) (SETQ c 0) (IF (EQL a sym) (INCQ c)) ) (OPEN-INPUT-FILE name) (CLOSE-INPUT-FILE name) (LOOP c ) ((NOT (LISTEN))) 2. Надрукувати файл в оберненому порядку, якщо його елементи є атомами. (DEFUN rew (in out) (PUSH (READ) temp) ) (OPEN-INPUT-FILE in) (LOOP (OPEN-OUTPUT-FILE out) ((EQL temp NIL)) (SETQ temp NIL) (WRITE (POP temp)) (LOOP (SPACES 1) ) ((NOT (LISTEN))) (CLOSE-INPUT-FILE in) (CLOSE-OUTPUT-FILE out) ) Завдання 1. Написати функцію (SRT ), яка сортує текстовий файл та виводить дані в файл . 2. Написати функції (PRNUM2 num) та (PRNUM16 num), які відповідно друкують введені десяткові числа в двійковому та шістнадцятковому представленні. 3. Згенерувати за даними числом n та символом y список (y yy yyy yyyy .... yyyyyyyy. Кількість літер s в останньому елементі списку дорівнює n. Відповіді 1. (DEFUN appl (lst1 lst2) ((NULL lst1) (append lst3 lst2)) ((NULL lst2) (append lst3 lst1)) ((STRING< (CAR lst1) (CAR lst2)) (CONS (CAR lst1) (appl (CDR lst1) lst2))) (CONS (CAR lst2) (APPL lst1 (CDR lst2))) ) (DEFUN QSORT (lst) ((NULL (CDR lst)) lst) ((NULL (CDDR lst)) ((STRING< (CAR lst) (CADR lst)) lst) (CONS (CADR lst) (CONS (CAR lst) NIL))) (SETQ tmp1 (SPLIT lst)) (APPL (QSORT tmp1) (QSORT lst)) ) (DEFUN srt (in out) (OPEN-INPUT-FILE in) (OPEN-OUTPUT-FILE out) (SETQ temp NIL) (LOOP ((NOT (LISTEN))) (PUSH (READ) temp) ) (setq temp1 (qsort temp)) (print temp1) (CLOSE-INPUT-FILE in) (CLOSE-OUTPUT-FILE out) ) 2. (DEFUN prnum2 (num) (SETQ res NIL) (LOOP ((= num 1)) (SETQ tmp (DIVIDE num 2)) (SETQ num (CAR tmp)) (PUSH (CDR tmp) res) ) (PUSH 1 res) (PACK res) ) (DEFUN prnum16 (num) (SETQ res NIL) (LOOP ((< num 16)) (SETQ tmp (DIVIDE num 16)) (SETQ num (CAR tmp) tmp (CDR tmp)) (IF (>= tmp 10) (SETQ tmp (ASCII (+ (- 65 10) tmp)))) (PUSH tmp res) ) (IF (>= num 10) (SETQ num (ASCII (+ (- 65 10) num)))) (PUSH num res) (PACK res) ) 3. ; (m1 y 7 y) -> (y yy yyy yyyy yyyyy yyyyyy yyyyyyy) (DEFUN m1 (sym n list) ((ZEROP n) NIL) (CONS (APPEND sym list) (m1 sym (- n 1) (PACK* sym list))) )
Категория: Інформатика | Добавил: referatwm
Просмотров: 286 | Загрузок: 102 | Рейтинг: 0.0/0