Ôóíêö³¿ ðÿäê³â

 

Ôóíêö³¿ ðÿäê³â ïðèçíà÷åí³ äëÿ ðîáîòè ç òåêñòàìè. Âîíè çàáåçïå÷óþòü âèêîíàííÿ âåëèêî¿ ê³ëüêîñò³ îïåðàö³é íàä òåêñòîâèìè äàííèìè — ïîð³âíÿííÿ, ïîøóêó òà ïåðåòâîðåííÿ 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)))  )