Ôóíêö³¿
ðÿäê³â
Ôóíêö³¿ ðÿäê³â ïðèçíà÷åí³ äëÿ ðîáîòè ç
òåêñòàìè. Âîíè çàáåçïå÷óþòü âèêîíàííÿ âåëèêî¿ ê³ëüêîñò³ îïåðàö³é íàä òåêñòîâèìè
äàííèìè — ïîð³âíÿííÿ, ïîøóêó òà ïåðåòâîðåííÿ P - ³ìåí ñèìâîë³â òà ÷èñåë.
1. UNPACK <atom>. Ïîâåðòຠñïèñîê ñèìâîë³â, P - ³ìåíà
êîæíîãî ç ÿêèõ ñêëàäàþòüñÿ ç ñèìâîë³â àòîìà <atom>. ßêùî <atom> íå
º àòîìîì, ïîâåðòàºòüñÿ NIL.
$ (UNPACK ‘abcde) $ (UNPACK 216) $ (SETQ *PRINT-BASE 16*)
(a b c d e) (\2 \1 \6) $ (UNPACK 216)
(\0 \D \8)
2. PACK <list>. Ïîâåðòຠñèìâîë, P - ³ì’ÿ ÿêîãî
ñêëà䳺òüñÿ ç³ ñ÷åïëåíèõ P - ³ìåí àòîì³â ó ñïèñêó <list>. Äëÿ âèçíà÷åííÿ
P - ³ìåí ÷èñåë âèêîðèñòîâó- ºòüñÿ ïîòî÷íà ñèñòåìà ÷èñëåííÿ. Ôóíêö³ÿ PACK çàâæäè
ïîâåðòຠñèìâîë, íàâ³òü ÿêùî P - ³ì‘ÿ ñêëàäàºòüñÿ ò³ëüêè ç îäíîçíà÷íèõ ÷èñåë.
$ (PACK ‘(a b c d e) $ (PACK ‘(\7 \3 \1) $ (PACK ‘(Q \7 \A \1))
abcde |731| Q7A1
3. PACK* <atom1> ... <atomN>. Ïîâåðòຠñèìâîë, P-³ì’ÿ ÿêîãî
ñêëàäàºòüñÿ ç³ ñ÷åïëåíèõ P-³ìåí àòîì³â. Öÿ ôóíêö³ÿ º âóçüêîþ âåðñ³ºþ PACK,
îñê³ëüêè âîíà ïðàöþº íå ç³ ñïèñêîì àòîì³â, à ç áóäü-ÿêîþ ê³ëüê³ñòþ àòîì³â.
$ (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) $ (CHAR ‘ABCDE 3) $ (CHAR 12345 0)
((ATOM atm) D \1
(NTH n (UNPACK atm)) ) )
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.
$ (FINDSTRING ‘BC ‘ABCDEFG) (FINDSTRING ‘abc ‘abdeabcde)
1 4
10. PRINT-LENGTH <atom>. Ïîâåðòຠê³ëüê³ñòü ñèìâîë³â â 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
ïîêè íå áóäå ïðî÷èòàíî ñèìâîë ïåðåõîäó íà íîâèé ðÿäîê (<return>).
Ïîâåðòàºòüñÿ ñèìâîë, Ð-³ì’ÿ ÿêîãî ñêëàäàºòüñÿ ç óñ³õ ïðî÷èòàíèõ ñèìâîë³â ÿê ò³
áóëè ðîçòàøîâàí³ ó âõ³äíîìó ðÿäêó, îêð³ì <return>.
4.
Ôóíêö³ÿ
(READ-CHAR) ÷èòຠíàñòóïíèé åëåìåíò
ç CIS òà ïîâåðòຠéîãî.
5.
Ôóíêö³ÿ
(UNREAD-CHAR) ïîâåðòຠâ CIS
îñòàíí³é ïðî÷èòàíèé ñèìâîë.
6.
Ôóíêö³ÿ
(LISTEN) ïîâåðòຠT ÿêùî CIS íå
ïîðîæí³é, òà NIL ÿêùî ìè ä³éøëè äî ê³íöÿ ôàéëó.
7. Ôóíêö³¿ (OPEN-INPUT-FILE “<name>”) òà (CLOSE-INPUT-FILE “<name>”) âèêîðèñòîâóþòüñÿ äëÿ â³äêðèòòÿ òà
çàêðèòòÿ ôàéëà <name> äëÿ ââîäó.
8. Ôóíêö³¿ (OPEN-OUTPUT-FILE “<name>”) òà (CLOSE-OUTPUT-FILE “<name>”) â³äïîâ³äíî â³äêðèâàþòü òà
çàêðèâàþòü ôàéë <name> äëÿ âèâîäó
³íôîðìàö³¿.
Ïðèêëàäè
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 <in>
<out>), ÿêà ñîðòóº òåêñòîâèé ôàéë <in> òà âèâîäèòü äàí³ â ôàéë
<out>.
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))) )