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

Lisp / Filp / LISP11

.TXT
Скачиваний:
19
Добавлен:
15.06.2014
Размер:
24.52 Кб
Скачать
5.14.3. ЏҐаҐ¬Ґ­­лҐ гЇа ў«Ґ­Ёп ўлў®¤®¬ ЏҐаҐ¬Ґ­­лҐ гЇа ў«Ґ­Ёп
ўлў®¤®¬ гбЁ«Ёў ов ¤Ґ©бвўЁп Є®­ва®«м­ле Їа®Ја ¬¬ muLISP ­ ¤
ўл室­л¬Ё бЁ¬ў®« ¬Ё. Ќ ЁЎ®«ҐҐ 㤮Ў­® ЁбЇ®«м§®ў вм §¤Ґбм ў
Є зҐб⢥ ЇҐаҐЄ«оз вҐ«Ґ© OFF (в.Ґ. NIL) Ё«Ё ON (в.Ґ. ­Ґ NIL).





ECHO : NIL Control variable

…б«Ё ECHO - ­Ґ NIL Ё ¤ЁбЄ®ўл© д ©« пў«пҐвбп cons-®¬,
бЁ¬ў®«л, ЇҐаҐ¤ ­­лҐ ў д ©«, ЇҐаҐ¤ овбп в Є¦Ґ Ё ­  Є®­б®«м. …б«Ё
ECHO - NIL, бЁ¬ў®«л ­Ґ ®ва ¦ овбп ­  Є®­б®«Ё. ђҐ§г«мв в а Ў®вл
ECHO ЇаЁ бзЁвлў ­ЁЁ ¤ ­­ле Ё§ д ©«  Ї®Є § ­ 5.13.




LINELENGTH :'LINELENGTH C. v.

ЏҐаҐ¬Ґ­­ п Є®­ва®«п LINELENGTH ¬®¦Ґв ЁбЇ®«м§®ў вмбп ¤«п
®в¬Ґ­л  ўв®¬ вЁзҐбЄ®Ј® ®Ја ­ЁзҐ­Ёп ¤«Ё­л бва®ЄЁ. …б«Ё LINELENGTH
- ­Ґ NIL, ўл室­лҐ бва®ЄЁ  ўв®¬ вЁзҐбЄЁ ®Ја ­ЁзЁў овбп в Є, Є Є
®ЇаҐ¤Ґ«Ґ­® дг­ЄжЁҐ© LINELENGTH.
…б«Ё LENGTH - NIL, ўбҐ  ўв®¬ вЁзҐбЄЁҐ ®Ја ­ЁзҐ­Ёп ­  ¤«Ё­г
бва®ЄЁ гбва ­повбп. ќв® ®б®ЎҐ­­® 㤮Ў­® ў вҐе б«гз пе, Є®Ј¤ 
®Ја ­ЁзҐ­Ёп ­  ¤«Ё­г бва®ЄЁ ­Ґ¦Ґ« вҐ«м­л, в.Ґ. ¤«п । Єв®а 
нЄа ­  muSTAR Ё«Ё ЇаЁ ЇҐаҐбл«ЄҐ ®зҐ­м Ў®«ми®Ј® Є®«ЁзҐбвў  ¤ ­­ле
ў ¤ЁбЄ®ўл© д ©«.




*PRINT-DOWNCASE* : NIL C. v.

…б«Ё *PRINT-DOWNCASE* -­Ґ NIL,   бЁ¬ў®« Ё¬ҐҐв ђ-Ё¬п,
б®бв®п饥 Ё§ Їа®ЇЁб­ле ЎгЄў, Їа®ЎҐ«®ў Ё«Ё ¬ Єа®, Ё«Ё
а §Ја ­ЁзЁвҐ«м­ле бЁ¬ў®«®ў (б¬. а §¤Ґ« 5.13), Ё«Ё ­ зЁ­ о饥бп б
¤ҐбпвЁз­®© жЁдал, нв® ђ-Ё¬п бЁ¬ў®«  а §Ја ­ЁзЁў Ґвбп
а §Ја ­ЁзЁвҐ«м­л¬Ё бЁ¬ў®« ¬Ё ЇаЁ ЇҐаҐ¤ зҐ ҐЈ® ў COS дг­ЄжЁп¬Ё
PRINT Ё PRIN1. …б«Ё *PRINT-DOWNCASE* Ґбвм NIL, ђ-Ё¬Ґ­  в ЄЁе
бЁ¬ў®«®ў ­Ґ а §Ја ­ЁзЁў овбп.
ђ §Ј ­ЁзҐ­ЁҐ ђ-Ё¬Ґ­ в ЄЁе бЁ¬ў®«®ў б Ї®¬®ймо
а §Ја ­ЁзЁвҐ«м­ле бЁ¬ў®«®ў ­Ґ®Ўе®¤Ё¬® ¤«п Їа®Ја ¬¬, Є®в®алҐ
ЈҐ­ҐаЁагов Ёб室­лҐ д ©«л muLISP.




*PRINT-BASE* : 10 C. v.

…б«Ё §­ зҐ­ЁҐ *PRINT-BASE* - н⮠楫®Ґ зЁб«® ў Ё­вҐаў «Ґ
2-36 ўЄ«озЁвҐ«м­®, в® н⮠楫®Ґ зЁб«® ЎҐаҐвбп §  ®б­®ўг бЁб⥬л
бзЁб«Ґ­Ёп ЇаЁ ўлзЁб«Ґ­ЁЁ зЁбҐ«, ЇҐаҐ¤ ў Ґ¬ле ў COS. ‚ Їа®вЁў­®¬
б«гз Ґ зЁб« , ЇҐаҐ¤ ў Ґ¬лҐ ў COS, ®ЇаҐ¤Ґ«повбп Є Є ¤ҐбпвЁз­лҐ
(в.Ґ. ®б­®ў  бЁб⥨л бзЁб«Ґ­Ёп - ¤Ґбпвм).
ЏаЁ¬Ґа:
(SETQ TEN 10) --> 10
(SETQ *PRINT-BASE* 16) --> 10
TEN --> 0A ;Ten in hexadecimal
(SETQ *PRINT-BASE* 2) --> 10
TEN --> 1010 ;Ten in binary
(SETQ *PRINT-BASE* 10) --> 10
TEN --> 10 ;Ten in decimal




*PRINT-POUIN* : 7 C. v.

…б«Ё *PRINT-POINT* - ­Ґ®ваЁж вҐ«м­®Ґ 楫®Ґ, ¤а®Ў­лҐ зЁб« 
ўлᢥ稢 овбп ­  нЄа ­ б ЁбЇ®«м§®ў ­ЁҐ¬ ¤ҐбпвЁз­®Ј®
ЇаҐ¤бв ў«Ґ­Ёп, ЇаЁзҐ¬ *PRINT-POINT* ®ЇаҐ¤Ґ«пҐв Є®«ЁзҐбвў® §­ Є®ў,
б«Ґ¤гойЁе §  ¤ҐбпвЁз­®© в®зЄ®©. ‚ Їа®вЁў­®¬ б«гз Ґ ¤а®Ў­лҐ зЁб« 
§ ЇЁблў овбп б ЁбЇ®«м§®ў ­ЁҐ¬ б«Ґи  (в.Ґ. зЁб«ЁвҐ«м, "/" Ё
§­ ¬Ґ­ вҐ«м).
Ћв¬ҐвЁ¬, зв® *PRINT-POINT* ў«ЁпҐв в®«мЄ® ­  ўл¤ зг зЁбҐ« ­ 
нЄа ­, ­® ­Ґ ў«ЁпҐв ­  Ёе в®з­®бвм. Ља®¬Ґ в®Ј®, зЁб«  ¬®Јгв
§ ЇЁблў вмбп «ЁЎ® б ЁбЇ®«м§®ў ­ЁҐ¬ ¤ҐбпвЁз­®Ј® ЇаҐ¤бв ў«Ґ­Ёп,
«ЁЎ® б Ї®¬®ймо б«Ґи , ­Ґ§ ўЁбЁ¬® ®в §­ зҐ­Ёп *PRINT-POINT*.
‡­ зҐ­ЁҐ *PRINT-POINT* Ї® 㬮«з ­Ёо а ў­® 7. ќв® §­ зҐ­ЁҐ
¬®¦Ґв Ўлвм Ё§¬Ґ­Ґ­® Їг⥬ ¬®¤ЁдЁЄ жЁЁ ®в¤Ґ«м­ле з б⥩ Ў §л
muLISP (б¬. ЏаЁ¬Ґз ­ЁҐ).
ЏаЁ¬Ґа:
(SETQ P1 3.1416) --> 3.1416
(SETQ *PRINT-POINT* NIL) --> NIL
P1 --> 3927/1250
(SETQ *PRINT-POINT* 2) --> 2
P1 --> 3.14
(SETQ *PRINT-POINT* 7) --> 7
P1 --> 3.1416





*PRINTER-ECHO* : NIL Function

…б«Ё *PRINT-ECHO* - ­Ґ NIL, бЁ¬ў®«л, ЇҐаҐ¤ ў Ґ¬лҐ ­ 
Є®­б®«м, ЇҐаҐ¤ овбп в Є¦Ґ ЇаЁ­вҐаг бЁб⥬л. …б«Ё
*PRINT-ECHO* - NIL, ЇҐз вм ­Ґ ўлЇ®«­пҐвбп.




5.15. ‚лзЁб«пҐ¬лҐ дг­ЄжЁЁ

ЋЎлз­® ўлзЁб«Ґ­ЁҐ ўла ¦Ґ­Ё© Ё ®Ўа йҐ­ЁҐ Є дг­ЄжЁп¬
ўлЇ®«­пҐвбп  ўв®¬ вЁзҐбЄЁ Ё­вҐаЇаҐв в®а®¬ muLISP. ‚лзЁб«пҐ¬лҐ
дг­ЄжЁЁ ­г¦­л ў вҐе б«гз пе, Є®Ј¤  ­Ґ®Ўе®¤Ё¬® в®з­® ўлзЁб«Ёвм
ўла ¦Ґ­ЁҐ Ё«Ё ®Ўа вЁвмбп Є дг­ЄжЁЁ. ЋЇаҐ¤Ґ«Ґ­ЁҐ дг­ЄжЁЁ Ґбвм
бЇЁб®Є, б®бв®пйЁ© Ё§ ваҐе з б⥩: ­ Ё¬Ґ­®ў ­Ёп вЁЇ  дг­ЄжЁЁ,
д®а¬ «м­ле Ї а ¬Ґва®ў Ё ⥫  дг­ЄжЁЁ.
Car-н«Ґ¬Ґ­в®¬ ®ЇаҐ¤Ґ«Ґ­Ёп дг­ЄжЁЁ пў«пҐвбп ­ Ё¬Ґ­®ў ­ЁҐ вЁЇ 
дг­ЄжЁЁ, в.Ґ. LAMBDA, NLAMBDA Ё«Ё MACRO. ’ЁЇ дг­ЄжЁЁ ¤ Ґв
Ё­вҐаЇаҐв в®аг Ё­д®а¬ жЁо ® ⮬, Є Є ЁбЇ®«м§®ў вм ¤ ­­го дг­ЄжЁо.
”г­ЄжЁп вЁЇ  LAMBDA ­ §лў Ґвбп ўлзЁб«пҐ¬®©. …б«Ё ўл§лў Ґвбп
ўлзЁб«пҐ¬ п дг­ЄжЁп, в® Є ¦¤л© Ё§ ҐҐ  аЈг¬Ґ­в®ў ўлзЁб«пҐвбп,  
б ¬®© дг­ЄжЁЁ ЇҐаҐ¤ Ґвбп в®«мЄ® ҐЈ® §­ зҐ­ЁҐ.
”г­ЄжЁп вЁЇ  NLAMBDA ­ §лў Ґвбп ­ҐўлзЁб«пҐ¬®©. …б«Ё
ўл§лў Ґвбп ­ҐўлзЁб«пҐ¬ п дг­ЄжЁп, в® ҐҐ  аЈг¬Ґ­вл ЇҐаҐ¤ овбп Ґ©
ЎҐ§ ўлзЁб«Ґ­Ёп ў ⮬ ўЁ¤Ґ, Є Є ®­Ё бв®пв ў Є®¬ ­¤Ґ ўл§®ў . ’.Є.
ЁбЇ®«м§®ў ­ЁҐ ­ҐўлзЁб«пҐ¬ле дг­ЄжЁ© ¬®¦Ґв ЇаЁўҐбвЁ Є а §«Ёз­л¬
Є®­д«ЁЄв­л¬ бЁвг жЁп¬, ®Ўлз­® ЇаҐ¤Ї®звЁвҐ«м­ҐҐ Ї®«м§®ў вмбп
¬ Єа®-дг­ЄжЁп¬Ё, 祬 ­ҐўлзЁб«пҐ¬л¬Ё.
”г­ЄжЁп вЁЇ  MACRO ­ §лў Ґвбп ¬ Єа®-дг­ЄжЁҐ©. …б«Ё
ўл§лў Ґвбп ¬ Єа®-дг­ЄжЁп, в® б­ з «  ЁбЇ®«м§гҐвбп
¬ Єа®®ЇаҐ¤Ґ«Ґ­ЁҐ ¤«п Їа ўЁ«м­®Ј® ўл§®ў  ¬ Єа® ЎҐ§ ўлзЁб«Ґ­Ёп.
ђҐ§г«мв в в ЄЁе ¬ Єа®а биЁаҐ­Ё© § вҐ¬ ўлзЁб«пҐвбп Ё ўл¤ Ґвбп Є Є
§­ зҐ­ЁҐ ¬ Єа®. Љ®­ва®«м §  ¬ Єа® ®бгйҐбвў«пҐв ЇҐаҐ¬Ґ­­ п
MACROEXPAND.
Cadr-н«Ґ¬Ґ­в®¬ ®ЇаҐ¤Ґ«Ґ­Ёп дг­ЄжЁЁ пў«пҐвбп «ЁЎ® бЇЁб®Є
д®а¬ «м­ле  аЈг¬Ґ­в®ў, «ЁЎ® Ё¬п д®а¬ «м­®Ј®  аЈг¬Ґ­в . ”г­ЄжЁп,
®ЇаҐ¤Ґ«Ґ­­ п б Ї®¬®ймо бЇЁбЄ  д®а¬ «м­ле  аЈг¬Ґ­в®ў, ў ⮬ зЁб«Ґ
Їгбв®Ј®, ­ §лў Ґвбп а §ўҐа­гв®©. …б«Ё ўл§лў Ґвбп в Є п дг­ЄжЁп,
в® д ЄвЁзҐбЄЁҐ  аЈг¬Ґ­вл ЇаЁўп§лў овбп ᮮ⢥вб⢥­­® Є
д®а¬ «м­л¬  аЈг¬Ґ­в ¬.
”г­ЄжЁп, ®ЇаҐ¤Ґ«Ґ­­ п б Ї®¬®ймо Ё¬Ґ­Ё д®а¬ «м­®Ј®  аЈг¬Ґ­в ,
­ §лў Ґвбп ­Ґа §ўҐа­гв®©. …б«Ё ўл§лў Ґвбп в Є п дг­ЄжЁп, бЇЁб®Є
д ЄвЁзҐбЄЁе  аЈг¬Ґ­в®ў бўп§лў Ґвбп б Ё¬Ґ­Ґ¬ д®а¬ «м­®Ј®
 аЈг¬Ґ­в . ‘«Ґ¤®ў вҐ«м­®, ­Ґа §ўҐа­гвлҐ дг­ЄжЁЁ ¬®Јгв ¤®ЇгбЄ вм
Їа®Ё§ў®«м­лҐ Ё¬Ґ­  д ЄвЁзҐбЄЁе  аЈг¬Ґ­в®ў.
Ћв¬ҐвЁ¬, зв® ў бЁб⥬Ґ muLISP аҐиҐ­ЁҐ ᤥ« вм дг­ЄжЁо
а §ўҐа­гв®© Ё«Ё ­Ґв ЇаЁ­Ё¬ Ґвбп ­Ґ§ ўЁбЁ¬® ®в аҐиҐ­Ёп ᤥ« вм ҐҐ
ўлзЁб«пҐ¬®© Ё«Ё ­Ґв, в.Ґ. нвЁ Їа®жҐббл ­Ґ ў«Ёпов ¤агЈ ­  ¤агЈ .
Cddr-н«Ґ¬Ґ­в®¬ ®ЇаҐ¤Ґ«Ґ­Ёп дг­ЄжЁЁ пў«пҐвбп бЇЁб®Є д®а¬,
Є®в®ал© ­ §лў Ґвбп ⥫®¬ дг­ЄжЁЁ. Џ®б«Ґ в®Ј®, Є Є д®а¬ «м­лҐ
 аЈг¬Ґ­вл дг­ЄжЁЁ Ўл«Ё гўп§ ­л б ҐҐ д ЄвЁзҐбЄЁ¬Ё, ­ зЁ­ Ґв
а Ў®в вм ­Ґпў­ п дг­ЄжЁп PROGN, ўлзЁб«пой п ⥫® дг­ЄжЁЁ (б¬.
а §¤Ґ« 5.16). Џ® ®Є®­з ­ЁЁ ўлзЁб«Ґ­Ёп ⥫  дг­ЄжЁЁ д®а¬ «м­лҐ
 аЈг¬Ґ­вл б­®ў  ЇаЁ­Ё¬ ов бў®Ё ЇҐаў®­ з «м­лҐ §­ зҐ­Ёп,  
१г«мв в ўлзЁб«Ґ­Ёп ⥫  дг­ЄжЁЁ ўл¤ Ґвбп Є Є §­ зҐ­ЁҐ дг­ЄжЁЁ.

5.15.1. ‚лзЁб«Ґ­ЁҐ Ё ЇаЁ¬Ґ­Ґ­ЁҐ дг­ЄжЁ©.

”г­ЄжЁЁ, ЇҐаҐзЁб«Ґ­­лҐ ў ¤ ­­®¬ а §¤Ґ«Ґ, Ї®§ў®«пов в®з­®
ўлзЁб«пвм ўла ¦Ґ­Ёп Ё ЁбЇ®«м§®ў вм дг­ЄжЁЁ б®Ј« б­® Ёе
­ §­ зҐ­Ёп¬.


EVAL [object] Function

…б«Ё <®ЎмҐЄв> -  в®¬, (EVAL ®ЎмҐЄв> ўл¤ Ґв ᮤҐа¦Ё¬®Ґ п祩ЄЁ
§­ зҐ­Ёп <®ЎмҐЄв >. ’.Є. ббл«ЄЁ ­  ­®ўлҐ ўлЎа ­­лҐ  в®¬л
 ўв®¬ вЁзҐбЄЁҐ,  в®¬л ўлзЁб«пов б ¬Ё бҐЎп ¤® вҐе Ї®а, Ї®Є  ­Ґ
Ўг¤гв бўп§ ­л б ¤агЈЁ¬Ё §­ зҐ­Ёп¬Ё.
…б«Ё car-н«Ґ¬Ґ­в <®ЎмҐЄв > - нв® Ё¬п ўлзЁб«пҐ¬®© дг­ЄжЁЁ,
Ё«Ё LAMBDA, (EVAL ®ЎмҐЄв) ўлзЁб«пҐв Є ¦¤л© н«Ґ¬Ґ­в cdr-з бвЁ
<®ЎмҐЄв > Ё ¤®Ў ў«пҐв car-н«Ґ¬Ґ­в <®ЎмҐЄв > Є бЇЁбЄг १г«мв в®ў.
…б«Ё car-н«Ґ¬Ґ­в <®ЎмҐЄв > - Ё¬п ­ҐўлзЁб«пҐ¬®© дг­ЄжЁЁ,
(EVAL ®ЎмҐЄв) ¤®Ў ў«пҐв car-н«Ґ¬Ґ­в <®ЎмҐЄв > Є cdr-н«Ґ¬Ґ­вг
<®ЎмҐЄв > ЎҐ§ ўлзЁб«Ґ­Ёп Ї®б«Ґ¤­ҐЈ®.
…б«Ё car-н«Ґ¬Ґ­в <®ЎмҐЄв > - Ё¬п ¬ Єа®дг­ЄжЁЁ, (EVAL ®ЎмҐЄв>
४габЁў­® ўлзЁб«пҐв १г«мв в ¤®Ў ў«Ґ­Ёп car-н«Ґ¬Ґ­в  <®ЎмҐЄв >
Є ҐЈ® cdr-н«Ґ¬Ґ­вг.
…б«Ё car-н«Ґ¬Ґ­в <®ЎмҐЄв > - ­Ґ дг­ЄжЁп, (EVAL ®ЎмҐЄв)
ўл§лў Ґв ®иЁЎЄг "ЌҐ®ЇаҐ¤Ґ«Ґ­­ п дг­ЄжЁп" (UNDEFINED) Ё ЈҐ­ҐаЁагҐв
ЇаҐалў ­ЁҐ Ї® ®иЁЎЄҐ.
ЏаЁ¬Ґа:
(DEFUN EVAL (OBJ)
((ATOM OBJ)
(CAR OBJ) )
((SYMBOLP (CAR OBJ))
((eval function (CAR OBJ))
(APPLY (CAR OBJ) (MAPCAR 'EVAL (CDR OBJ))) )
((no-eval function (CAR OBJ))
(APPLY (CAR OBJ) (CDR OBJ)) )
((macro function (CAR OBJ))
(EVAL (APPLY (CAR OBJ) OBJ)) )
(APPLY 'UNDEFINED OBJ) )
((EQ (CAAR OBJ) 'LAMBDA)
(APPLY (CAR OBJ) (MAPCAR 'EVAL (CDR OBJ))) )
(APPLY 'UNDEFINED OBJ) )

(SETQ JOHN 'MAN) --> MAN
(SETQ MAN 'ANIMAL) --> ANIMAL
JOHN --> MAN
(EVAL JOHN) --> ANIMAL

(EVAL '(CONS 'A '(B C D))) --> (A B C D)
((LAMBDA (N) (* N N)) 5) --> 25





APPLY [function,arg1,arg2,...,arglist] Function

…б«Ё <дг­ЄжЁп> Ґбвм ­ §ў ­ЁҐ ¤Ґ©бвўЁп ­  ¬ иЁ­­®¬ п§лЄҐ,
(APPLY дг­ЄжЁп  аЈ.1  аЈ.2 ...  аЈ.бЇЁб®Є) ЇҐаҐ¤ Ґв д ЄвЁзҐбЄЁҐ
 аЈг¬Ґ­вл (в.Ґ. < аЈ.1>, < аЈ.2>, ... Ї«об н«Ґ¬Ґ­вл < аЈ.бЇЁбЄ >)
<дг­ЄжЁЁ> ­  ¬ иЁ­­®¬ п§лЄҐ Ё ў®§ўа й Ґв १г«мв в а Ў®вл дг­ЄжЁЁ.
…б«Ё <дг­ЄжЁп> - Ё¬п ®ЇаҐ¤Ґ«Ґ­­®© Ї®«м§®ў вҐ«Ґ¬ дг­ЄжЁЁ Ё«Ё
⥫® LAMBDA, APPLY бўп§лў Ґв д®а¬ «м­лҐ  аЈг¬Ґ­вл <дг­ЄжЁЁ> б
д ЄвЁзҐбЄЁ¬Ё  аЈг¬Ґ­в ¬Ё (в.Ґ. < аЈ.1>, < аЈ.2>, ... Ї«об
н«Ґ¬Ґ­вл < аЈ.бЇЁбЄ >), ўлзЁб«пҐв ⥫® дг­ЄжЁЁ, ў®бв ­ ў«Ёў Ґв
ЇҐаў®­ з «м­®Ґ §­ зҐ­ЁҐ д®а¬ «м­ле  аЈг¬Ґ­в®ў Ё ў®§ўа й Ґв
§­ зҐ­ЁҐ ўлзЁб«Ґ­Ёп ⥫  дг­ЄжЁЁ.
…б«Ё дг­ЄжЁп - ­Ґ Ё¬п дг­ЄжЁЁ Ё«Ё ­Ґ ⥫® LAMBDA, APPLY
ЈҐ­ҐаЁагҐв ЇаҐалў ­ЁҐ Ї® ®иЁЎЄҐ "ЌҐ®ЇаҐ¤Ґ«Ґ­­ п дг­ЄжЁп".
ЏаЁ¬Ґа:
(DEFUN APPLY (FUNC ARG1 ARG2 ... ARGS)
(SETQ ARGS (LIST* ARG1 ARG2 ... ARGS))
((SYMBOLP FUNC)
((machine language routine FUNC)
(execute the machine language routine using
ARGS for the arguments) )
((OR (eval function FUNC) (no-eval function FUNC))
(eval-body ARGS (arguments FUNC) (body FUNC)) )
(APPLY 'UNDEFINED (CONS FUNC ARGS)) )
((OR (EQ (CAR FUNC) 'LAMBDA) (EQ (CAR FUNC) 'NLAMBDA))
(eval-body ARGS (CADR FUNC) (CDDR FUNC)) )
(APPLY 'UNDEFINED (CONS FUNC ARGS)) )

(DEFUN eval-body (ACTUAL FORMAL BODY)
((LISTP FORMAL)
(MAPC '(LAMBDA (X) (PUSH (EVAL X) STACKLIST)) FORMAL)
(MAPC 'SET FORMAL ACTUAL)
(PROG1 (PROGN BODY) (MAPC
'(LAMBDA (X) (SET X (POP STACKLIST))) FORMAL)) )
(PUSH (EVAL FORMAL) STACKLIST)
(SET FORMAL ACTUAL)
(PROG1 (PROGN BODY) (SET FORMAL (POP STACKLIST))) )

(APPLY 'CONS '(A (B C D))) --> (A B C D)
(APPLY '(LAMBDA (N) (* N N)) '(5)) --> 25





FUNCALL [function,arg1,arg2,...,argN] Function

(FUNCALL дг­ЄжЁп  аЈ.1  аЈ.2 ...  аЈ.N) ®бгйҐбвў«пҐв
ўлЇ®«­Ґ­ЁҐ ¤Ґ©бвўЁ© <дг­ЄжЁЁ> ­ ¤ < аЈг¬Ґ­в ¬Ё> Ё ў®§ўа й Ґв
१г«мв в. <”г­ЄжЁп> ¤®«¦­  Ўлвм Ё«Ё Ё¬Ґ­Ґ¬ ўлзЁб«пҐ¬®© Ё«Ё
­ҐўлзЁб«пҐ¬®© дг­ЄжЁЁ, Ё«Ё ⥫®¬ LAMBDA. …б«Ё <дг­ЄжЁп> - нв® Ё¬п
¬ Єа® Ё«Ё ­Ґ®ЇаҐ¤Ґ«Ґ­­®© дг­ЄжЁЁ, ў®§­ЁЄ Ґв ЇаҐалў ­ЁҐ Ї® ®иЁЎЄҐ
"ЌҐ®ЇаҐ¤Ґ«Ґ­­ п дг­ЄжЁп".
ЏаЁ¬Ґа:
(DEFUN FUNCALL (FUNC ARG1 ARG2 ... ARGn)
(APPLY FUNC ARG1 ARG2 ... ARGn NIL) )

(FUNCALL 'CONS 'A '(B C D)) --> (A B C D)
(FUNCALL '(LAMBDA (N) (* N N)) 5) --> 25






CONSTANTP [object] Function

<ЋЎмҐЄв> пў«пҐвбп Є®­бв ­в®© в®Ј¤  Ё в®«мЄ® в®Ј¤ , Є®Ј¤ 
(EVAL ®ЎмҐЄв) ў®§ўа й Ґв <®ЎмҐЄв>. ‘Ё¬ў®« NIL, зЁб«  Ё бЇЁбЄЁ, г
Є®в®але car-н«Ґ¬Ґ­в Ґбвм бЁ¬ў®« QUOTE, а бб¬ ваЁў Ґвбп ў muLISP
Є Є Є®­бв ­вл. …б«Ё <®ЎмҐЄв> - Є®­бв ­в , (CONSTANTP ®ЎмҐЄв)
ў®§ўа й Ґв ’, Ё­ зҐ - NIL.
ЏаЁ¬Ґа:
(DEFUN CONSTANTP (OBJ)
((NULL OBJ))
((NUMBERP OBJ))
((ATOM OBJ) NIL)
(EQ (CAR OBJ) 'QUOTE) )

(CONSTANTP ()) --> T
(CONSTANTP 'T) --> NIL
(CONSTANTP -237.6) --> T
(CONSTANTP '(QUOTE (A B C))) --> T



UNDEFINED [symbol,form1,...,formN] Function

UNDEFINED Ё­ЁжЁЁагҐв ЇаҐалў ­ЁҐ Ї® ®иЁЎЄҐ "ЌҐ®ЇаҐ¤Ґ«Ґ­­ п
дг­ЄжЁп", ®бгйҐбвў«пп ўл§®ў (BREAK (LIST бЁ¬ў®« д®а¬ 1 ...
д®а¬ N)'"Undefined Function").
„ ­­ п дг­ЄжЁп гЇа ў«Ґ­Ёп ®иЁЎЄ®© ўл§лў Ґвбп в®Ј¤ , Є®Ј¤ 
¤Ґ« Ґвбп Ї®ЇлвЄ  ўлзЁб«Ёвм д®а¬г, г Є®в®а®© car-н«Ґ¬Ґ­в Ґбвм
бЁ¬ў®«, ­Ґ Ё¬ҐойЁ© ®ЇаҐ¤Ґ«Ґ­Ёп дг­ЄжЁЁ. ‚ᥠнв® Ї®¬®Ј Ґв
Ї®«м§®ў вҐ«о ®ЇаҐ¤Ґ«Ёвм вЁЇ ®иЁЎЄЁ.
ЏаЁ¬Ґа:
(DEFUN UNDEFINED LST
(BREAK LST '"Undefined Function") )





5.15.2. ”г­ЄжЁЁ ¬ Єа®а биЁаҐ­Ё©

‚л§®ў ¬ Єа® ЇаҐ¤бв ў«пҐв б®Ў®© бЇЁб®Є д®а¬ (macro form1
form2 ... formN), Ј¤Ґ <¬ Єа®> - Ё¬п ¬ Єа®дг­ЄжЁЁ. ЋЎлз­®
¬ Єа®а биЁаҐ­ЁҐ Ї®пў«пҐвбп  ўв®¬ вЁзҐбЄЁ, Є®Ј¤  Є®¬ЇЁ«ЁагҐвбп Ё¤Ё
ўлЇ®«­пҐвбп ўл§®ў ¬ Єа®. Ћ¤­ Є®, ЇаЁўҐ¤Ґ­­лҐ ­Ё¦Ґ дг­ЄжЁЁ
Ї®§ў®«пов Ї®«м§®ў вҐ«о Ї®б¬®ваҐвм, Є Є ®бгйҐбвў«пҐвбп нв®в ўл§®ў.


MACROEXPAND-1 [form] Function

…б«Ё <д®а¬ > Ґбвм ¬ Єа®ўл§®ў, (MACROEXPAND-1 д®а¬ )
ўлЇ®«­пҐв а биЁаҐ­ЁҐ <д®а¬л> (в.Ґ. ®бгйҐбвў«пҐв ¤Ґ©бвўЁп
¬ Єа®дг­ЄжЁЁ ­ ¤ <д®а¬®©>) Ё ў®§ўа й Ґв १г«мв в. ‚ Їа®вЁў­®¬
б«гз Ґ MACROEXPAND-1 ў®§ўа й Ґв <д®а¬г>.
ЏаЁ¬Ґа:
(DEFUN MACROEXPAND-1 (FORM)
((ATOM FORM) FORM)
((NOT (SYMBOLP (CAR FORM))) FORM)
((NOT (EQ 'MACRO (GETD (CAR FORM) T))) FORM)
(APPLY (CAR FORM) FORM) )




MACROEXPAND [form] Function

…б«Ё <д®а¬ > пў«пҐвбп ¬ Єа®ўл§®ў®¬, (MACROEXPAND д®а¬ )
Ї®ўв®а­® а биЁапҐв <д®а¬г> ¤® вҐе Ї®а, Ї®Є  १г«мв в а биЁаҐ­Ёп
­Ґ Ўг¤Ґв ¬ Єа®ўл§®ў®¬. MACROEXPAND ў®§ўа й Ґв १г«мв в
Ї®б«Ґ¤­ҐЈ® а биЁаҐ­Ёп.
ЏаЁ¬Ґа:
(DEFUN MACROEXPAND (FORM)
((ATOM FORM) FORM)
((NOT (SYMBOLP (CAR FORM))) FORM)
((NOT (EQ 'MACRO (GETD (CAR FORM) T))) FORM)
(MACROEXPAND (APPLY (CAR FORM) FORM)) )




MACROEXPAND: 'MACROEXPAND Control variable

…б«Ё MACROEXPAND Ґбвм ­Ґ NIL, ¬ Єа®ўл§®ўл а биЁаповбп в ЄЁ¬
¦Ґ а®Ўа §®¬, Є Є ЇаЁ дг­ЄжЁЁ MACROEXPAND ў® ўаҐ¬п Є®¬ЇЁ«пжЁЁ
(в.Ґ. Є®Ј¤  дг­ЄжЁп ®ЇаҐ¤Ґ«пҐвбп б Ї®¬®ймо DEFUN Ё«Ё PUTD). …б«Ё
MACROEXPAND - NIL, ¬ Єа®ўл§®ўл ­Ґ а биЁаповбп ў® ўаҐ¬п Є®¬ЇЁ«пжЁЁ.
•®вп Ё­вҐаЇаҐв в®а muLISP  ўв®¬ вЁзҐбЄЁ а биЁапҐв
¬ Єа®ўл§®ўл ў® ўаҐ¬п ўлЇ®«­Ґ­Ёп (в.Ґ. Є®Ј¤  дг­ЄжЁп ўлзЁб«пҐвбп),
®Ўлз­® 㤮Ў­ҐҐ ®бгйҐбвў«пвм а биЁаҐ­ЁҐ ¬ Єа®б®ў в®«мЄ® ®¤Ё­ а § -
ў® ўаҐ¬п Є®¬ЇЁ«пжЁЁ. „«п ¬ Єа®а биЁаҐ­Ё© ў® ўаҐ¬п Є®¬ЇЁ«пжЁЁ
¬ Єа® ¤®«¦­® Ўлвм ®ЇаҐ¤Ґ«Ґ­® ЇҐаҐ¤ ®ЇаҐ¤Ґ«Ґ­ЁҐ¬ дг­ЄжЁЁ,
ᮤҐа¦ йҐ© ¬ Єа®ўл§®ў,   MACROEXPAND ¤®«¦Ґ­ Ё¬Ґвм §­ зҐ­ЁҐ ­Ґ NIL.




5.15.3. ”г­ЄжЁЁ Ї« ­Ёа®ў ­Ёп дг­ЄжЁ©

”г­ЄжЁЁ, Є®в®алҐ а бб¬ ваЁў овбп ў ¤ ­­®¬ Ї®¤а §¤Ґ«Ґ, ў
Є зҐб⢥ бў®Ёе  аЈг¬Ґ­в®ў ЁбЇ®«м§гов ¤агЈЁҐ дг­ЄжЁЁ,   в Є¦Ґ ®¤Ё­
Ё«Ё Ў®«ҐҐ бЇЁбЄ®ў. ”г­ЄжЁЁ Ї« ­Ёа®ў ­Ёп ®ЎҐбЇҐзЁўбов ўлЎ®а
ў®§¬®¦­ле ў аЁ ­в®ў ЇаЁ ў®§ўа вҐ १г«мв в®ў а Ў®вл ¤агЈЁе
дг­ЄжЁ©.


MAPC [function,list1,...,listN] Function

(MAPC дг­ЄжЁп бЇЁб®Є1 ... бЇЁб®ЄN) ўлЇ®«­пҐв ¤Ґ©бвўЁп
<дг­ЄжЁЁ> ­ ¤ car-н«Ґ¬Ґ­в ¬Ё <бЇЁбЄ 1>, ..., <бЇЁбЄ N>, § вҐ¬ -
­ ¤ cdr-н«Ґ¬Ґ­в ¬Ё Є ¦¤®Ј® бЇЁбЄ , Ё в.¤. ¤® вҐе Ї®а, Ї®Є  Є ¦¤л©
бЇЁб®Є ­Ґ Ўг¤Ґв ЁбзҐаЇ ­. ЊЂђ‘ ў®§ўа й Ґв <бЇЁб®Є1>.
ЏаЁ¬Ґа:
(DEFUN MAPC (FUNC LST1 LST2)
((OR (NULL LST1) (NULL LST2)) LST1)
(FUNCALL FUNC (CAR LST1) (CAR LST2))
(MAPC FUNC (CDR LST1) (CDR LST2))
LST1 )

(MAPC 'PRIN1 '(DOG CAT COW)) --> DOGCATCOW is displayed &
(DOG CAT COW) is returned





MAPL [function,list1,list2,...,listN] Function

(MAPL дг­ЄжЁп бЇЁб®Є1 ... бЇЁб®ЄN) ўлЇ®«­пҐв ¤Ґ©бвўЁп
<дг­ЄжЁЁ> ­ ¤ н«Ґ¬Ґ­в ¬Ё <бЇЁбЄ 1>, ..., <бЇЁбЄ N>, § вҐ¬ - ­ ¤
cdr-н«Ґ¬Ґ­в ¬Ё Є ¦¤®Ј® бЇЁбЄ  Ё в.¤., Ї®Є  Є ¦¤л© бЇЁб®Є ­Ґ Ўг¤Ґв
ЁбзҐаЇ ­. MAPL ў®§ўа й Ґв <бЇЁб®Є1>.
ЏаЁ¬Ґа:
(DEFUN MAPL (FUNC LST1 LST2)
((OR (NULL LST1) (NULL LST2)) LST1)
(FUNCALL FUNC LST1 LST2)
(MAPL FUNC (CDR LST1) (CDR LST2))
LST1 )

(MAPL 'PRIN1 '(A B C)) --> (A B C)(B C)(C) is displayed &
(A B C) is returned





MAPCAR [function,list1,list2,...,listN] Function

(MAPCAR дг­ЄжЁп бЇЁб®Є1 ... бЇЁб®ЄN) ўлЇ®«­пҐв ¤Ґ©бвўЁп
<дг­ЄжЁЁ> ­ ¤ car-н«Ґ¬Ґ­в ¬Ё <бЇЁбЄ 1>, ...,<бЇЁбЄ N>, § вҐ¬ -
­ ¤ cadr-н«Ґ¬Ґ­в ¬Ё Є ¦¤®Ј® бЇЁбЄ , Ё в,¤, ¤® вҐе Ї®а, Ї®Є 
Є ¦¤л© бЇЁб®Є ­Ґ Ўг¤Ґв ЁбзҐаЇ ­. MAPCAR ў®§ўа й Ґв бЇЁб®Є
१г«мв в®ў.
ЏаЁ¬Ґа:
(DEFUN MAPCAR (FUNC LST1 LST2)
((OR (NULL LST1) (NULL LST2)) NIL)
(CONS (FUNCALL FUNC (CAR LST1) (CAR LST2))
(MAPCAR FUNC (CDR LST1) (CDR LST2))) )

(MAPCAR '*'(2 3 5 7) '(2 4 6 8)) --> (4 12 30 56)





MAPLIST [function,list1,list2,...,listN] Function

(MAPLIST дг­ЄжЁп бЇЁб®Є1 ... бЇЁб®ЄN) ўлЇ®«­пҐв ¤Ґ©бвўЁп
<дг­ЄжЁЁ> ­ ¤ н«Ґ¬Ґ­в ¬Ё <бЇЁбЄ 1>, ..., <бЇЁбЄ N>, § вҐ¬ - ­ ¤
cdr-н«Ґ¬Ґ­в ¬Ё Є ¦¤®Ј® бЇЁбЄ  Ё в.¤. ¤® вҐе Ї®а, Ї®Є  Є ¦¤л© Ё§
бЇЁбЄ®ў ­Ґ Ўг¤Ґв ЁбзҐаЇ ­. MAPLIST ў®§ўа й Ґв бЇЁб®Є १г«мв в®ў.
ЏаЁ¬Ґа:
(DEFUN MAPLIST (FUNC LST1 LST2)
((OR (NULL LST1) (NULL LST2)) NIL)
(CONS (FUNCALL FUNC LST1 LST2)
(MAPLIST FUNC (CDR LST1) (CDR LST2))) )

(MAPLIST 'REVERSE '(A B C D)) --> ((D C B A) (D C B) (D C) (D))




MAPCAN [function,list1,list2,...,listN] Function

(MAPCAN дг­ЄжЁп бЇЁб®Є1 ... бЇЁб®ЄN) ўлЇ®«­пҐв ¤Ґ©бвўЁп
<дг­ЄжЁЁ> ­ ¤ car-н«Ґ¬Ґ­в ¬Ё <бЇЁбЄ 1>, ..., <бЇЁбЄ N>, § вҐ¬ -
­ ¤ cadr-н«Ґ¬Ґ­в ¬Ё Є ¦¤®Ј® бЇЁбЄ , Ё в.¤. ¤® вҐе Ї®а, Ї®Є 
Є ¦¤л© Ё§ бЇЁбЄ®ў ­Ґ Ўг¤Ґв ЁбзҐаЇ ­. MAPCAN бўп§лў Ґв бў®Ё
१г«мв вл, ЁбЇ®«м§гп NCONC.
MAPCAN 㤮ЎҐ­ ¤«п ўлЎ®аЄЁ ­Ґ¦Ґ« вҐ«м­ле н«Ґ¬Ґ­в®ў Ё§ бЇЁбЄ .
Ќ  ЇаЁ¬ҐаҐ Ї®Є § ­®, Є Є ¬®¦­® «ЁЄўЁ¤Ёа®ў вм Ё§ бЇЁбЄ 
®ваЁж вҐ«м­лҐ зЁб« :

(DEFUN MAPCAN (FUNC LST1 LST2)
((LAMBDA (LST) (LOOP
((OR (NULL LST1) (NULL LST2)) LST)
(SETQ LST (NCONC LST
(FUNCALL FUNC (POP LST1) (POP LST2)))) ) )) )

(MAPCAN '(LAMBDA (N) ((MINUSP N)) (LIST N)) '(3 -7 4 0 -5 1))
--> (3 4 0 1)





MAPCON [function,list1,list2,...,listN] Function

(MAPCON дг­ЄжЁп бЇЁб®Є1 ... бЇЁб®ЄN) ўлЇ®«­пҐв ¤Ґ©бвўЁп
<дг­ЄжЁЁ> ­ ¤ н«Ґ¬Ґ­в ¬Ё <бЇЁбЄ 1>, ..., <бЇЁбЄ N>, § вҐ¬ - ­ ¤
cdr-н«Ґ¬Ґ­в ¬Ё Є ¦¤®Ј® бЇЁбЄ  Ё в.¤. ¤® вҐе Ї®а, Ї®Є  Є ¦¤л© Ё§
бЇЁбЄ®ў ­Ґ Ўг¤Ґв ЁбзҐаЇ ­. MAPCON бўп§лў Ґв бў®Ё १г«мв вл,
ЁбЇ®«м§гп NCONC.
Ћв¬ҐвЁ¬, зв® MAPCON ¬®¦Ґв «ҐЈЄ® § жЁЄ«Ёў вм бЇЁбЄЁ, Ї®н⮬г
ЁбЇ®«м§®ў вм нвг дг­ЄжЁо ­г¦­® ®бв®а®¦­®.
ЏаЁ¬Ґа:
(DEFUN MAPCON (FUNC LST1 LST2)
((LAMBDA (LST) (LOOP
((OR (NULL LST1) (NULL LST2)) LST)
(SETQ LST (NCONC LST (FUNCALL FUNC LST1 LST2)))
(POP LST1)
(POP LST2) ) ) )) )

(MAPCON 'REVERSE '(A B C D)) --> (D C B A D C B D C D)


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