
Добавил:
Kaz
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
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)
ўлў®¤®¬ гбЁ«Ёў ов ¤Ґ©бвўЁп Є®ва®«мле Їа®Ја ¬¬ 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