Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lisp / Filp / LISP7

.TXT
Скачиваний:
19
Добавлен:
15.06.2014
Размер:
21.79 Кб
Скачать
5.10. Ќ з «м­лҐ ўла ¦Ґ­Ёп ¤«п ®ЇаҐ¤Ґ«Ґ­Ё©


Ќ з «м­лҐ ўла ¦Ґ­Ёп ЁбЇ®«м§говбп ¤«п ¬ ­ЁЇг«Ёа®ў ­Ёп
®ЇаҐ¤Ґ«Ґ­Ёп¬Ё дг­ЄжЁ©. Љ®Ј¤  дг­ЄжЁп ®ЇаҐ¤Ґ«пҐвбп, нв®
®ЇаҐ¤Ґ«Ґ­ЁҐ  ўв®¬ вЁзҐбЄЁ ЇбҐў¤®Є®¬ЇЁ«ЁагҐвбп ў бЁ«м­® б¦ вго,
Є®¬Ї Єв­го д®а¬г - в Є ­ §лў Ґ¬л© D-Є®¤.
ЋЎа в­л© Їа®жҐбб ¤ҐЄ®¬ЇЁ«пжЁЁ ®ЇаҐ¤Ґ«Ґ­Ё© дг­ЄжЁ© ў
бўп§ ­­л© бЇЁб®Є ®бгйҐбвў«пҐвбп  ўв®¬ вЁзҐбЄЁ б ЁбЇ®«м§®ў ­ЁҐ¬
GETD ¤«п ў®ббв ­®ў«Ґ­Ёп ®ЇаҐ¤Ґ«Ґ­Ё©. ‘«Ґ¤®ў вҐ«м­®, Ё Є®¬ЇЁ«пжЁп,
Ё ¤ҐЄ®¬ЇЁ«пжЁп ­ҐўЁ¤Ё¬л ¤«п Ї®«м§®ў вҐ«п.



GETD [svmbol,tvpe-only-flag] Function


…б«Ё <бЁ¬ў®«> Ґбвм дг­ЄжЁп, ®ЇаҐ¤Ґ«Ґ­­ п Ї®«м§®ў вҐ«Ґ¬,
(GETD бЁ¬ў®«) ¤ҐЄ®¬ЇЁ«ЁагҐв Ё ўл¤ Ґв ®ЇаҐ¤Ґ«Ґ­ЁҐ <бЁ¬ў®« > ў
д®а¬Ґ бўп§ ­­®Ј® бЇЁбЄ . …б«Ё <бЁ¬ў®«> - Їа®бв п дг­ЄжЁп Ё«Ё
бЇҐжЁ «м­ п д®а¬ , (GETD бЁ¬ў®«) ў®§ўа й Ґв  ¤аҐб ў дЁ§ЁзҐбЄ®©
Ї ¬пвЁ и Ў«®­  ­  ¬ иЁ­­®¬ п§лЄҐ. …б«Ё <бЁ¬ў®«> ­Ґ пў«пҐвбп
бЇҐжЁ «м­®© д®а¬®© Ё«Ё дг­ЄжЁҐ©, (GETD бЁ¬ў®«) ў®§ўа й Ґв NIL.
…б«Ё <д« Ј> Ґбвм ­Ґ NIL, (GETD бЁ¬ў®« д« Ј) ў®§ўа й Ґв
SPECIAL, Ґб«Ё <бЁ¬ў®«> пў«пҐвбп бЇҐжЁ «м­®© д®а¬®©, LAMBDA, Ґб«Ё
<бЁ¬ў®«> пў«пҐвбп дг­ЄжЁҐ© ўлзЁб«Ґ­Ёп, NLAMBDA, Ґб«Ё <бЁ¬ў®«> ­Ґ
пў«пҐвбп дг­ЄжЁҐ© ўлзЁб«Ґ­Ёп, MACRO, Ґб«Ё <бЁ¬ў®«> пў«пҐвбп
¬ Єа®-дг­ЄжЁҐ©, Ё«Ё NIL, Ґб«Ё <бЁ¬ў®«> ­Ґ®ЇаҐ¤Ґ«Ґ­.
ЏаЁ¬Ґа:
(DEFUN GETD (SYMBOL FLAG)
((NOT (SYMBOLP SYMBOL)) NIL)
((undefined SYMBOL) NIL)
((NULL FLAG)
((machine language routine SYMBOL)
(the memory address of the routine) )
(the S-expression equvalent of the D-code defining
the function SYMBOL) )
((special form SYMBOL) 'SPECIAL)
((eval function SYMBOL) 'LAMBDA)
((no-eval function SYMBOL) 'NLAMBDA)
((macro function SYMBOL) 'MACRO) )




PUTD [symbol,definition] Function

(PUTD бЁ¬ў®« ®ЇаҐ¤Ґ«Ґ­ЁҐ) Є®¬ЇЁ«ЁагҐв <®ЇаҐ¤Ґ«Ґ­ЁҐ> ў
D-Є®¤, ¬®¤ЁдЁжЁагҐв н«Ґ¬Ґ­в ®ЇаҐ¤Ґ«Ґ­Ёп дг­ЄжЁЁ <бЁ¬ў®« > ­ 
гЄ § ­ЁҐ ­  Є®¬ЇЁ«ЁагҐ¬л© D-Є®¤ Ё ў®§ўа й Ґв <бЁ¬ў®«>. ЋЎмҐЄвл,
­Ґ пў«пойЁҐбп  в®¬ ¬Ё (в.Ґ. Є®­бв ­вл), ў ®ЇаҐ¤Ґ«Ґ­ЁЁ дг­ЄжЁЁ ­Ґ
Є®¬ЇЁ«Їаговбп, ­® ®бв овбп б®еа ­Ґ­­л¬Ё Є Є бўп§ ­­л© бЇЁб®Є.
‘«Ґ¤®ў вҐ«м­®, ў ®в«ЁзЁҐ ®в Ў®«ҐҐ а ­­Ёе ўҐабЁ©, Ё­вҐаЇаҐв в®а
muLISP-85 ­Ґ ¤®«¦Ґв ¤ҐЄ®¬ЇЁ«Ёа®ў вм в ЄЁҐ Є®­бв ­вл Є ¦¤л© а §,
Є Є ®­Ё ўбваҐз овбп, Ё Є®­бв ­вл ¬®Јгв ᮤҐа¦ вм cons-л б
cdr-н«Ґ¬Ґ­в ¬Ё, пў«пойЁ¬Ёбп ­ҐNIL- в®¬ ¬Ё.
ЏҐаҐ¬Ґ­­ п PUTD гЇа ў«пҐв б¦ вЁҐ¬ D-Є®¤  ў® ўаҐ¬п
Є®¬ЇЁ«пжЁЁ. ЏҐаҐ¬Ґ­­ п MACROEXPAND гЇа ў«пҐв ¬ Єа®а биЁаҐ­ЁҐ¬ ў®
ўаҐ¬п Є®¬ЇЁ«пжЁЁ.
„«п бўп§Ё б ®ЇаҐ¤Ґ«Ґ­­л¬Ё Ї®«м§®ў вҐ«Ґ¬ и Ў«®­ ¬Ё ­ 
¬ иЁ­­®¬ п§лЄҐ PUTD ўл§лў Ґвбп б <®ЇаҐ¤Ґ«Ґ­ЁҐ¬>, а ў­л¬  ¤аҐб ¬ ў
дЁ§ЁзҐбЄ®© Ї ¬пвЁ нвЁе и Ў«®­®ў. „«п Ў®«ҐҐ ¤Ґв «м­®Ј®
а бᬮв७Ёп Їа ўЁ« а Ў®вл б и Ў«®­ ¬Ё ­  ¬ иЁ­­®¬ п§лЄҐ б¬.
Ј« ўг 7.
ЏаЁ¬Ґа:
(DEFUN PUTD (SYMBOL DEFN)
((OR (NOT (SYMBOLP SYMBOL)) (SYMBOLP DEFN)) NIL)
((NUMBER DEFN)
((AND (INTEGERP DEFN) (PLUSP DEFN))
(store DEFN in SYMBOL's function cell)
SYMBOL ) )
(compile DEFN into D-code)
(store a pointer to the D-code in SYMBOL's function cell)
SYMBOL )

(PUTD 'SQUARE '(LAMBDA (NUM) (*NUM NUM))) --> SQUARE
(SQUARE 5) --> 25





MOVD [symbol1,symbol2] Function

(MOVD бЁ¬ў®«1 бЁ¬ў®«2) ЇҐаҐ¤ Ґв ®ЇаҐ¤Ґ«Ґ­ЁҐ дг­ЄжЁЁ ®в
<бЁ¬ў®« 1> Є <бЁ¬ў®«г2> Ё ў®§ўа й Ґв <бЁ¬ў®«2>. ‚ вҐе б«гз пе,
Є®Ј¤  ¤®бв в®з­® дг­ЄжЁЁ MOVD, ®­  ¬®¦Ґв ЁбЇ®«м§®ў вмбп ў¬Ґбв®
Є®¬ЎЁ­ жЁЁ GETD-PUTD, в.Є. ­Ґ вॡгҐв ЇҐаҐЄ®¬ЇЁ«пжЁЁ.
Ќ  ЇаЁ¬Ґа е Ї®Є § ­®, Є Є ¬®¦­® ЁбЇ®«м§®ў вм MOVD ¤«п
ЇаЁбў Ёў ­Ёп ¤агЈЁе ¬­Ґ¬®­ЁзҐбЄЁе Ё¬Ґ­ ­ҐЄ®в®ал¬ дг­ЄжЁп¬
ᥫҐЄв®а  LISP ЎҐ§ гйҐаЎ  ¤«п нд䥪⨢­®бвЁ Ёе ўлЇ®«­Ґ­Ёп.
ЏаЁ¬Ґа:
(DEFUN MOVD (SYMBOL1 SYMBOL2)
((AND (SYMBOLP SYMBOL1) (SYMBOLP SYMBOL2))
(replace the contents of SYMBOL2's function cell with
the contents of SYMBOL1's function cell)
SYMBOL2 ) )

(MOVD 'CAR 'FIRST) --> FIRST
(MOVD 'CDR 'REST) --> REST
(MOVD 'CADR 'SECOND) --> SECOND
(MOVD 'CADDR 'THIRD) --> THIRD
(MOVD 'CADDDR 'FOURTH) --> FOURTH
(FIRST '(A B C D)) --> A




REMD [symbol] Function

(REMD бЁ¬ў®«) ¬®¤ЁдЁжЁагҐв н«Ґ¬Ґ­в ®ЇаҐ¤Ґ«Ґ­Ёп дг­ЄжЁЁ
<бЁ¬ў®« >, ¤Ґ« п <бЁ¬ў®«> ­Ґ®ЇаҐ¤Ґ«Ґ­­л¬. REMD ў®§ўа й Ґв
<бЁ¬ў®«>. ’.Є. бЁ¬ў®«л, Ґб«Ё ®­Ё, Ї®¬Ё¬® ўбҐЈ® Їа®зҐЈ®,
­Ґ®ЇаҐ¤Ґ«Ґ­л, ¬®Јгв Ўлвм ўлЎа ­л в®«мЄ® бЎ®айЁЄ®¬ ¬гб®а , REMD
з бв® ЁбЇ®«м§гов ¤«п нвЁе 楫Ґ©.
ЏаЁ¬Ґа:
(DEFUN REMD (SYMBOL)
((SYMBOLP SYMBOL)
(change SYMBOL's function cell to be yndefined) ) )

(PUTD 'SWITCH '(LAMBDA (SYM1 SYM2) (CONS SYM2 SYM1)))
(SWITCH 'DOG 'CAT) --> (CAT . DOG)
(REMD 'SWITCH) --> SWITCH
(GETD 'SWITCH) --> NIL
(SWITCH 'DOG 'CAT) --> "Undefintd Function" error break




PUTD: 'PUTD Control variable

Љ®Ј¤  ®ЇаҐ¤Ґ«Ґ­ЁҐ дг­ЄжЁЁ бЄ®¬ЇЁ«Ёа®ў ­®, ®бгйҐбвў«пҐвбп
Ї®ЁбЄ бгйҐбвўгойЁе нЄўЁў «Ґ­в®ў D-Є®¤  ¤«п Є ¦¤®Ј® Ї®¤ўла ¦Ґ­Ёп ў
®ЇаҐ¤Ґ«Ґ­ЁЁ. …б«Ё в Є®© нЄўЁў «Ґ­в D-Є®¤  ­ ©¤Ґ­, ®­ ЁбЇ®«м§гҐвбп
ў¬Ґбв® ¤ «м­Ґ©иҐЈ® б®§¤ ­Ёп D-Є®¤ , ў бўп§Ё б 祬 нЄ®­®¬Ёвбп
Ї ¬пвм. ќв®в Їа®жҐбб ­ §лў Ґвбп Є®­¤Ґ­б жЁҐ©.
…б«Ё Єа­ва®«м­ п ЇҐаҐ¬Ґ­­ п PUTD Ґбвм ­ҐNIL, в® Ї®ЁбЄ ЇаЁ
Є®­¤Ґ­б жЁЁ ®Ја ­ЁзҐ­ б®Ўб⢥­­л¬ D-Є®¤®¬ ®ЇаҐ¤Ґ«Ґ­Ёп. •®вп ЇаЁ
н⮬ 㢥«ЁзЁў Ґвбп ®ЎмҐ¬ ЁбЇ®«м§гҐ¬®© Ї®¤ D-Є®¤ Ї ¬пвЁ,
®Ја ­ЁзҐ­ЁҐ ­  ®Ў« бвм Ї®ЁбЄ  §­ зЁвҐ«м­® 㬥­ми Ґв ўаҐ¬п ­ 
з⥭ЁҐ Ё Є®¬ЇЁ«пжЁо д ©«®ў, ᮤҐа¦ йЁе Ў®«м讥 Є®«ЁзҐбвў®
®ЇаҐ¤Ґ«Ґ­Ё© дг­ЄжЁ©.
…б«Ё PUTD Ґбвм NIL, Ї®ЁбЄ ЇаЁ Є®­¤Ґ­б жЁЁ ®еў влў Ґв ўбҐ
бгйҐбвўгойЁҐ D-Є®¤л. ќв® 㬥­ми Ґв ®ЎмҐ¬ Ї ¬пвЁ, ваҐЎгҐ¬л© ¤«п
еа ­Ґ­Ёп ¤ ­­®Ј® Є®«ЁзҐбвў  ®ЇаҐ¤Ґ«Ґ­Ё© дг­ЄжЁ©, ­® § в®
㢥«ЁзЁў Ґв ўаҐ¬п ­  Є®¬ЇЁ«пжЁо ®ЇаҐ¤Ґ«Ґ­Ё© дг­ЄжЁ©.
Љ®Ј¤  дг­ЄжЁп, ®ЇаҐ¤Ґ«Ґ­­ п Ї®«м§®ў вҐ«Ґ¬, ЇҐаҐ®ЇаҐ¤Ґ«Ґ­  б
Ї®¬®ймо PUTD Ё«Ё MOVD, Ё«Ё ҐҐ ®ЇаҐ¤Ґ«Ґ­ЁҐ г¤ «Ґ­® б Ї®¬®ймо REMD,
D-Є®¤, ЁбЇ®«м§гҐ¬л© ¤«п еа ­Ґ­Ёп ®ЇаҐ¤Ґ«Ґ­Ёп,  ўв®¬ вЁзҐбЄЁ
ЇҐаҐг⢥ত Ґвбп, Ґб«Ё Ї®«Ґ п Є®­¤Ґ­б жЁп ­Ґ Ўл«  ўлЇ®«­Ґ­  (в.Ґ.
Ґб«Ё PUTD ­Ґ Ўл« а ўҐ­ NIL).


DEFUN [symbol,arglist,form1,...,form N] Special form
DEFUN [symbol,(ftype arglist,form1,...,form N)] Special form


‘ЇҐжЁ «м­ п д®а¬  ¤«п ®ЇаҐ¤Ґ«Ґ­Ёп дг­ЄжЁ© DEFUN ўл§лў Ґвбп
¤ўг¬п бЇ®б®Ў ¬Ё. ЏҐаўл© бЇ®б®Ў Ў®«ҐҐ Єа вЄЁ©, ®­ ¬®¦Ґв
ЁбЇ®«м§®ў вмбп в®«мЄ® ¤«п ®ЇаҐ¤Ґ«Ґ­Ёп дг­ЄжЁ©. ‚в®а®© бЇ®б®Ў,
Єа®¬Ґ в®Ј®, ¬®¦Ґв ЁбЇ®«м§®ў вмбп ¤«п ®ЇаҐ¤Ґ«Ґ­Ёп ­ҐўлзЁб«пҐ¬ле
дг­ЄжЁ© Ё ¬ Єа®б®ў.
(DEFUN бЁ¬ў®«  аЈ.бЇЁб®Є д®а¬ 1 ... д®а¬  N) Є®¬ЇЁ«ЁагҐв
< аЈ.бЇЁб®Є> Ё д®а¬ЁагҐв ҐЈ® ­  D-Є®¤Ґ, ЇаҐ¤Ї®« Ј п, зв® вЁЇ
дг­ЄжЁЁ - ўлзЁб«пҐ¬ п, Ё«Ё LAMBDA. ‡ вҐ¬ DEFUN ¬®¤ЁдЁжЁагҐв
н«Ґ¬Ґ­в ®ЇаҐ¤Ґ«Ґ­Ёп дг­ЄжЁЁ <бЁ¬ў®« > ­  гЄ § ­ЁҐ ­ 
१г«мвЁагойЁ© D-Є®¤ Ё ў®§ўа й Ґв <бЁ¬ў®«>.
…б«Ё <f-вЁЇ> Ґбвм бЁ¬ў®« LAMBDA, NLAMBDA Ё«Ё MACRO, (DEFUN
бЁ¬ў®« (f-вЁЇ  аЈ.бЇЁб®Є д®а¬ 1 ... д®а¬  N)) Є®¬ЇЁ«ЁагҐв
< аЈ.бЇЁб®Є> Ё д®а¬ЁагҐв ҐЈ® ­  D-Є®¤Ґ, ЇаҐ¤Ї®« Ј п, зв® <F-вЁЇ>
- нв® ®ЇаҐ¤Ґ«Ґ­ЁҐ ўлзЁб«пҐ¬®©, ­ҐўлзЁб«пҐ¬®© Ё«Ё ¬ Єа®-дг­ЄжЁЁ.
‡ вҐ¬ DEFUN ¬®¤ЁдЁжЁагҐв дг­ЄжЁ®­ «м­л© н«Ґ¬Ґ­в <бЁ¬ў®« > ­ 
гЄ § ­ЁҐ ­  १г«мвЁагойЁ© D-Є®¤ Ё ў®§ўа й Ґв <бЁ¬ў®«>.
…б«Ё < ¤аҐб> (<address>) а ўҐ­ ­г«о Ё«Ё пў«пҐвбп
Ї®«®¦ЁвҐ«м­л¬ 楫л¬, ¬Ґ­миҐ, 祬 65536, (DEFUN бЁ¬ў®«  ¤аҐб)
¬®¤ЁдЁжЁагҐв н«Ґ¬Ґ­в дг­ЄжЁЁ <бЁ¬ў®« > ­  гЄ § ­ЁҐ ­  < ¤аҐб> Ё
ў®§ўа й Ґв <бЁ¬ў®«>.
ЏаЁ¬Ґа:
(DEFMACRO DEFUN (SYMBOL . BODY)
((ATOM BODY) NUIL)
((NUMBERP (CAR BODY))
(LIST 'PUTD (LIST 'QUOTE SYMBOL) (CAR BODY)) )
((MEMBER (CAAR BODY) '(LAMBDA NLAMBDA MACRO))
(LIST 'PUTD (LIST 'QUOTE SYMBOL) (CONS 'QUOTE BODY)) )
(LIST 'PUTD (LIST 'QUOTE SYMBOL)
(LIST 'QUOTE (CONS 'LAMBDA BODY))) )




DEFMACRO [symbol,arglist,form1,...,form N] Special form


(DEFMACRO бЁ¬ў®«  аЈ.бЇЁб®Є д®а¬ 1 ... д®а¬  N)
¤ҐбвагЄвгаЁагҐв Ё Є®¬ЇЁ«ЁагҐв < аЈ.бЇЁб®Є> Ё ўбҐ <д®а¬л> ­ 
D-Є®¤, ¬®¤ЁдЁжЁагҐв н«Ґ¬Ґ­в ®ЇаҐ¤Ґ«Ґ­Ёп дг­ЄжЁЁ <бЁ¬ў®« > ­ 
гЄ § ­ЁҐ ­  १г«мвЁагойЁ© D-Є®¤ Ё ў®§ўа й Ґв <бЁ¬ў®«>.
‚ ®в«ЁзЁҐ ®в DEFUN, DEFMACRO ®ЎҐбЇҐзЁў Ґв ¤ҐбвагЄвгаЁа®ў ­ЁҐ
< аЈ.бЇЁбЄ >. ќв® ®§­ з Ґв, зв®  аЈг¬Ґ­вл § ЄаҐЇ«повбп § 
бЁ¬ў®« ¬Ё ў < аЈ.бЇЁбЄҐ> ­  ®б­®ўҐ бвагЄвгал < аЈ.бЇЁбЄ > ў ўЁ¤Ґ
бўп§ ­­®Ј® бЇЁбЄ . …б«Ё < аЈ.бЇЁб®Є> Ґбвм бЁ¬ў®«, в® д ЄвЁзҐбЄЁҐ
 аЈг¬Ґ­вл ў ¬ Єа®ўл§®ўҐ бўп§ ­л б бЁ¬ў®« ¬Ё. ‘ ¤агЈ®© бв®а®­л,
car-н«Ґ¬Ґ­вл  аЈг¬Ґ­в®ў ४габЁў­® бўп§ ­л б car-н«Ґ¬Ґ­в ¬Ё
< аЈ.бЇЁбЄ >,   cdr-н«Ґ¬Ґ­вл  аЈг¬Ґ­в®ў - б cdr-н«Ґ¬Ґ­в ¬Ё
< аЈ.бЇЁбЄ >.
ЏаЁ¬Ґа:
(PUTD DEFMACRO 'MACRO BODY
(POP BODY)
(LIST 'PUTD
(LIST 'QUOTE (CAR BODY))
(LIST 'QUOTE
(LIST 'MACRO
'BODY
(CONS (LIST* 'LAMBDA
(Leaves (CADR BODY))
(CDDR BODY))
(Destructure (CADR BODY) '(CDR BODY)

(DEFUN Leaves (TREE)
((ATOM TREE)
(LIST TREE) )
((NULL (CDR TREE))
(Leaves (CAR TREE)) )
(NCONC (Leaves (CAR TREE)) (Leaves (CDR TREE))) )

(DEFUN Destructure (TREE FORM)
((ATOM TREE)
(LIST FORM) )
((NULL (CDR TREE))
(Destructure (CAR TREE) (LIST 'CAR FORM)) )
(NCONC (Destructure (CAR TREE) (LIST 'CAR FORM))
(Destructure (CDR TREE) (LIST 'CDR FORM))) )



5.11. ‘ва®Є®ўлҐ дг­ЄжЁЁ



‘ва®Є®ўлҐ дг­ЄжЁЁ ЇаҐ¤­ §­ зҐ­л ¤«п а Ў®вл б ⥪бв ¬Ё Ё
п§лЄ ¬Ё. Ћ­Ё ®ЎҐбЇҐзЁў ов ўлЇ®«­Ґ­ЁҐ Ў®«ми®Ј® Є®«ЁзҐбвў 
бва®Є®ўле ®ЇҐа жЁ© ¤«п ба ў­Ґ­Ёп, Ї®ЁбЄ , Ё§ў«ҐзҐ­Ёп Ё
ЇаҐ®Ўа §®ў ­Ёп print-Ё¬Ґ­ бЁ¬ў®«®ў Ё зЁбҐ«.
Print-Ё¬п (а-Ё¬п) бЁ¬ў®«  § ЇЁблў Ґвбп в®з­® в Є ¦Ґ, Є Є Ё
бва®ЄЁ бЁ¬ў®« . ђ-Ё¬п зЁб«  ¤®«¦­® Ё§ў«ҐЄ вмбп Ё§ ҐЈ® §­ зҐ­Ёп,
Є®в®а®Ґ еа ­Ёвбп ў ¤ў®Ёз­®¬ ўЁ¤Ґ. ‘ва®Є®ўлҐ дг­ЄжЁЁ, ўл§лў Ґ¬лҐ б
зЁб«®ўл¬Ё  аЈг¬Ґ­в ¬Ё,  ўв®¬ вЁзҐбЄЁ б®§¤ ов бва®Єг бЁ¬ў®«®ў -
нЄўЁў «Ґ­в зЁб«®ў®Ј® §­ зҐ­Ёп ­  ®б­®ўҐ ⥪г饩 бЁб⥬л бзЁб«Ґ­Ёп
(б¬. *PRINT-BASE* ў а §¤.5-14).
‘«Ґ¤®ў вҐ«м­®, ў ¦­® ®в¬ҐвЁвм, зв® а-Ё¬п зЁб« , Є Є ўЁ¤­®
­  ЇаЁ¬ҐаҐ, Ё§¬Ґ­пҐвбп б Ё§¬Ґ­Ґ­ЁҐ¬ ⥪г饩 бЁб⥬л бзЁб«Ґ­Ёп.

UNPACK [atom] Fonction

(UNPACK  в®¬) ў®§ўа й Ґв бЇЁб®Є бЁ¬ў®«®ў, Ј¤Ґ а-Ё¬Ґ­ 
Є ¦¤®Ј® бЁ¬ў®«  б®бв®пв Ё§ бЁ¬ў®«®ў ў ЇҐз в­®¬ ЇаҐ¤бв ў«Ґ­ЁЁ
< в®¬ >. …б«Ё < в®¬> ­Ґ пў«пҐвбп  в®¬®¬, UNPACK ў®§ўа й Ґв NIL.
‚ ¤агЈЁе ўҐабЁпе LISP дг­ЄжЁп UNPACK ¬®¦Ґв Ё¬Ґвм Ё¬п EXPLODE.
ЏаЁ¬Ґа:
(DEFUN UNPACK (ATM)
((SYMBOLP ATM)
(a list of symbols whose print names consist of the
character in the print name of ATM) )
((NUMBERP ATM)
(a list of symbols whose print names consist of the
digits in the printed represented of ATM) ) )

(UNPACK 'ABCDE) --> (A B C D E)
(SETQ FOO -216) --> -216
(UNPACK FOO) --> (- \2 \1 \6)
(SETQ *PRINT-BASE* 16) --> 10
(UNPACK FOO) --> (- \0 D \8)
(SETQ *PRINT-BASE* 10) --> 10




PACK [list] Function

(PACK бЇЁб®Є) ў®§ўа й Ґв бЁ¬ў®«, г Є®в®а®Ј® а-Ё¬п б®бв®Ёв Ё§
б楯«Ґ­­ле а-Ё¬Ґ­  в®¬®ў ў <бЇЁбЄҐ>. „«п ®ЇаҐ¤Ґ«Ґ­Ёп а-Ё¬Ґ­ зЁбҐ«
ЁбЇ®«м§гҐвбп ⥪гй п бЁб⥬  бзЁб«Ґ­Ёп. Ћв¬ҐвЁ¬, зв® PACK ўбҐЈ¤ 
ў®§ўа й Ґв бЁ¬ў®«, ¤ ¦Ґ Ґб«Ё а-Ё¬п б®бв®Ёв в®«мЄ® Ё§ ®¤­®§­ з­ле
зЁбҐ«.
‚ ¤агЈЁе ўҐ­бЁпе LISP PACK ¬®¦Ґв Ё¬Ґвм Ё¬п COMPRESS Ё«Ё
IMPLODE.
ЏаЁ¬Ґа:
(DEFUN PACK (LST)
((ATOM LST) "")
((SYMBOLP (CAR LST))
(the symbol whose print name consists of the print name
of (CAR LST) concatenated with (PACK (CDR LST))) )
((NUMBERP (CAR LST))
(the symbol whose print name consists of the digits in
the printed representation of (CAR LST)
concatenated with (PACK (CDR LST))) )
(PACK (CDR LST)) )

(PACK '(A B C)) --> ABC
(PACK '(3 A 5)) --> |3A5|




PACK* [atom1,atom2,...,atom N] Function


(PACK*  в®¬1 ...  в®¬N) ў®§ўа й Ґв бЁ¬ў®«, г Є®в®а®Ј® а-Ё¬п
б®бв®Ёв Ё§ б楯«Ґ­­ле а-Ё¬Ґ­ < в®¬ 1>, ..., < в®¬ N>. PACK*
пў«пҐвбп Ў®«ҐҐ г§Є®© ўҐабЁҐ© PACK, в.Є. ®­ а Ў®в Ґв ­Ґ б® бЇЁбЄ®¬
 в®¬®ў,   б Їа®Ё§ў®«м­л¬ Є®«ЁзҐбвў®¬  в®¬®ў.
ЏаЁ¬Ґа:
(DEFUN PACK* LST
(PACK LST) )

(PACK* 'A 'B 'C) --> ABC
(PACK* 3 'A 5) --> |3A5|





CHAR [atom,n] Function


…б«Ё < в®¬> - «ЁЎ® бЁ¬ў®«, «ЁЎ® зЁб«®,   <n> -
­Ґ®ваЁж вҐ«м­®Ґ 楫®Ґ зЁб«®, (CHAR  в®¬ n) ў®§ўа й Ґв бЁ¬ў®«, г
Є®в®а®Ј® а-Ё¬п Ґбвм n-© бЁ¬ў®« а-Ё¬Ґ­Ё < в®¬ >, ЇаЁзҐ¬ ®вбзҐв
ўҐ¤Ґвбп б 0. CHAR ў®§ўа й Ґв NIL, Ґб«Ё <n> - ­Ё ­®«м, ­Ё
Ї®«®¦ЁвҐ«м­®Ґ 楫®Ґ зЁб«®, Ё«Ё Ґб«Ё а-Ё¬п < в®¬ > ᮤҐа¦Ёв
¬Ґ­миҐ, 祬 n, бЁ¬ў®«®ў.
ЏаЁ¬Ґа:
(DEFUN CHAR (ATM N)
((ATOM ATM)
(NTH N (UNPACK ATM)) ) )

(CHAR 'ABCDEFG 3) --> D
(CHAR 5432 0) --> \5





SUBSTRING [atom,n,m] Function


…б«Ё < в®¬> - ¤ЁЎ® бЁ¬ў®«, «ЁЎ® зЁб«®, <n> Ё <m> -
­Ґ®ваЁж вҐ«м­лҐ 楫лҐ, Ё n<=m, в® (SUBSTRING  в®¬ n m) ў®§ўа й Ґв
бЁ¬ў®«, г Є®в®а®Ј® а-Ё¬п б®бв®Ёв Ё§ бЁ¬ў®«®ў а-Ё¬Ґ­Ё < в®¬ >,
­ зЁ­ п б n-Ј® Ї® m-©, ЇаЁзҐ¬ ®вбзҐв бЁ¬ў®«®ў ўҐ¤Ґвбп б 0.
‚ᥠ§­ зҐ­Ёп <n> ¬Ґ­миҐ, 祬 0, ЇаЁ­Ё¬ овбп а ў­л¬Ё 0. …б«Ё
<m> Їа®Їг饭®, пў«пҐвбп ®ваЁж вҐ«м­л¬ жҐ«л¬ Ё«Ё Ў®«миҐ, 祬
Є®«ЁзҐбвў® бЁ¬ў®«®ў ў а-Ё¬Ґ­Ё < в®¬ >, ЇаЁ­Ё¬ Ґвбп, зв® <m> а ў­®
Є®«ЁзҐбвўг бЁ¬ў®«®ў ў а-Ё¬Ґ­Ё. …б«Ё <n> Ў®«миҐ Ё«Ё а ў­®
Є®«ЁзҐбвўг бЁ¬ў®«®ў ў а-Ё¬Ґ­Ё Ё«Ё Ґб«Ё n>m, SUBSTRING ў®§ўа й Ґв
бЁ¬ў®«, г Є®в®а®Ј®а-Ё¬п Ґбвм ­г«Ґў п бва®Є .
Ћв¬ҐвЁ¬, зв® SUBSTRING ўбҐЈ¤  ў®§ўа й Ґв бЁ¬ў®«, ¤ ¦Ґ Ґб«Ё
< в®¬> Ґбвм зЁб«®.
ЏаЁ¬Ґа:
(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) --> CDE
(SUBSTRING 'ABCDEFG 2) --> CDEFG
(SUBSTRING 'ABCDEFG 0 4) --> ABCDE
(SUBSTRING 1000 0) --> |1000| ; converts 1000
to sybmol





STRING= [atom1,atom2,flag] Function


…б«Ё а-Ё¬п < в®¬ 1> «ҐЄбЁЈа дЁзҐбЄЁ а ў­® а-Ё¬Ґ­Ё < в®¬ 2>,
(STRING  в®¬1  в®¬2) ў®§ўа й Ґв ’, Ё­ зҐ - NIL. …б«Ё <д« Ј> ­Ґ
а ўҐ­ NIL, (STRING  в®¬1  в®¬2 д« Ј) ўлЇ®«­пҐв  ­ «®ЈЁз­®Ґ
ба ў­Ґ­ЁҐ, ­® ЎҐ§ а §«ЁзЁп § Ј« ў­ле Ё Їа®ЇЁб­ле ЎгЄў.
ЏаЁ¬Ґа:
(DEFUN STRING= (ATM1 ATM2 FLAG)
((AND (ATOM ATM1) (ATOM ATM2))
((NULL FLAG)
((if ATM1's print name is lexicographically
equal to ATM2's print name) T) )
((if ATM1's print name is lexicographically, by
ignoring case, equal to ATM2's print name) T) ) )

(STRING= 'FAST 'FASTER) --> NIL
(STRING= 100 |100|) --> T
(STRING= 'Fast 'FAST T) --> T






STRING< [atom1,atom2,flag] Function
STRING> [atom1,atom2,flag] Function
STRING<= [atom1,atom2,flag] Function
STRING>= [atom1,atom2,flag] Function
STRING/= [atom1,atom2,flag] Function


…б«Ё а-Ё¬п < в®¬ 1> «ҐЄбЁЄ®Ја дЁзҐбЄЁ ¬Ґ­миҐ, 祬 а-Ё¬п
< в®¬ 2>, (STRING<  в®¬1  в®¬2) ў®§ўа й Ґв ­®¬Ґа Ї®§ЁжЁЁ ЇҐаў®Ј®
бЁ¬ў®« , ­ зЁ­ п б Є®в®а®Ј® а-Ё¬Ґ­  ­Ґ б®ўЇ ¤ ов; ў Їа®вЁў­®¬
б«гз Ґ ®­  ў®§ўа й Ґв NIL. …б«Ё <д« Ј> ­Ґ а ўҐ­ NIL, (STRING<
 в®¬1  в®¬2 д« Ј) ўлЇ®«­пҐв  ­ «®ЈЁз­®Ґ ба ў­Ґ­ЁҐ, ­® ЎҐ§
а §«ЁзЁп § Ј« ў­ле Ё Їа®ЇЁб­ле ЎгЄў.
„агЈЁҐ дг­ЄжЁЁ в Є¦Ґ ўлЇ®«­пов «ҐЄбЁЄ®Ја дЁзҐбЄ®Ґ ба ў­Ґ­ЁҐ
Ё ў®§ўа й ов Ё«Ё NIL. Ё«Ё ­®¬Ґа Ї®§ЁжЁЁ ЇҐаў®Ј® ­Ґб®ўЇ ¤ о饣®
бЁ¬ў®«  ў а-Ё¬Ґ­ е. STRING> ба ў­Ёў Ґв а-Ё¬Ґ­  ­  >, STRING<= -
­  <=, STRING>= - ­  >=,   STRING/= - ­  ­Ґ а ў­®.
ЏаЁ¬Ґа:
(DEFUN STRING< (ATM1 ATM2 FLAG)
((AND (ATOM ATM1) (ATOM ATM2))
((NULL FLAG)
((if ATM1's print name is lexicographically
less than ATM2's print name)
(the position of the first mismatch)) )
((if ATM1's print name is lexicographically, by
ignoring case, less than ATM2's print name)
(the position of the first mismatch)) ) )

(STRING< 'DOG 'CAT) --> NIL
(STRING< 'CAT 'DOG) --> 0
(STRING< 'DOG 'DOGGY) --> 3
(STRING<= 'DOG 'DOG) --> 3
(STRING/= 'DOG 'DOG) --> NIL














Соседние файлы в папке Filp