
Добавил:
Kaz
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
UNWIND-PROTECT [form1,form2,...,formN] Special form
(UNWIND-PROTECT д®а¬ 1 ... д®а¬ N) ўлзЁб«пҐв <д®а¬г1>,
§ ⥬ - ®бв ўиЁҐбп д®а¬л б Ї®¬®ймо Ґпў®Ј® PROGN, ¤ ¦Ґ Ґб«Ё
ўлзЁб«ҐЁҐ <д®а¬л1> § Є®зЁ«®бм ЇҐаҐе®¤®¬. Љ®Ј¤ ўлЇ®«ҐЁҐ PROGN
§ Є зЁў Ґвбп, UNWIND-PROTECT ў®§ўа й Ґв १г«мв в ўлзЁб«ҐЁп
<д®а¬л1>, Ґб«Ё ®® § Є®зЁ«®бм ®а¬ «м®. ‚ Їа®вЁў®¬ б«гз Ґ
дгЄжЁп Їа®¤®«¦ Ґв ўлЇ®«пвм ЇҐаҐе®¤, Ґб«Ё ўлзЁб«ҐЁҐ <д®а¬л1>
§ Є®зЁ«®бм ЇҐаҐе®¤®¬.
UNWIND-PROTECT 㤮ЎҐ ¤«п ЁбЇ®«м§®ў Ёп ў вҐе б«гз пе, Є®Ј¤
㦮 "ЇаЁўҐбвЁ ў Ї®а冷Є" зв®-«ЁЎ® Ї®б«Ґ ўлзЁб«ҐЁп <д®а¬л1>
Ґ§ ўЁбЁ¬® ®в в®Ј®, Є Є § ўҐаиЁ«®бм нв® ўлзЁб«ҐЁҐ. Ќ ЇаЁ¬Ґа,
¤ п д®а¬ Ўг¤Ґв Ј а вЁҐ© в®Ј®, зв® Ї®б«Ґ ўлзЁб«ҐЁп "ЇЁ" б
ўлб®Є®© в®з®бвмо ¤«п в®з®бвЁ Ўг¤Ґв ў®ббв ®ў«Ґ® ҐҐ
ЇҐаў® з «м®Ґ § 票Ґ, ¤ ¦Ґ Ґб«Ё ўлзЁб«ҐЁҐ "ЇЁ" Ўл«® ЇаҐаў ®
б Є« ўЁ вгал Ё«Ё ў®§ЁЄ« ®иЁЎЄ "Memory full".
ЏаЁ¬Ґа:
(PROGN (SETQ OLD-PRECISION (PRECISION))
(UNWIND-PROTECT (PROGN (PRECISION 100)
(COMPUTE-PI) )
(PRECISION OLD-PRECISION) ) )
THROW [label,object] Function
(THROW ¬ҐвЄ ®ЎмҐЄв) ҐЇ®б।б⢥® § Є зЁў Ґв ўлЇ®«ҐЁҐ
⥪г饣® ⥫ дгЄжЁЁ, ЇаЁбў Ёў Ґв ЇҐаҐ¬Ґ®© THROW § 票Ґ
<®ЎмҐЄв > Ё ЇҐаҐ¤ Ґв гЇа ў«ҐЁҐ ®Ўа в® ЇаҐ¤л¤гйЁ© CATCH,
Ё¬ҐойЁ© ¬ҐвЄг <¬ҐвЄ > Ё«Ё ¬ҐвЄг NIL. CATCH ў®§ўа й Ґв <®ЎмҐЄв>
(в.Ґ. § 票Ґ ЇҐаҐ¬Ґ®© THROW). …б«Ё CATCH Ґ ©¤Ґ,
гЇа ў«ҐЁҐ ў®§ўа й Ґвбп Є ўлЇ®«Ё¬®¬г ¤а ©ўҐаг muLISP.
Ћв¬ҐвЁ¬, зв® THROW - нв® ўлзЁб«пҐ¬ п дгЄжЁп, Ї®н⮬г
<¬ҐвЄ > Ё <®ЎмҐЄв> ўлзЁб«повбп ¤® в®Ј®, Є Є ў®§ЁЄ Ґв ЇҐаҐе®¤.
ЏаЁ¬Ґа:
(DEFUN THROW (LABEL EXPN)
(SETQ THROW EXPN)
(activate the throw flag)
(unwind the variable and control stacks until a CATCH with
a matching label or the NIL label is found, or the
top-level muLISP executive loop is reached) )
(CATCH 'FOO (PRINT 'DOG)
(CATCH 'BAR (PRINT 'CAT)
(THROW 'FOO 'COW)
(PRINT 'PIG) )
(PRINT 'RAT) )
DOG
CAT
COW
RETURN [object Function
(RETURN ®ЎмҐЄв) ЇаЁ®бв ў«Ёў Ґв ўлЇ®«ҐЁҐ дгЄжЁЁ,
ᮤҐа¦ 饩 RETURN, а бЄагзЁў Ґв (unwinds) б⥪Ё Ё ў®§ўа й Ґв
<®ЎмҐЄв> ў Є зҐб⢥ бў®ҐЈ® § 票п.
ЏаЁ¬Ґа:
(DEFUN RETURN (OBJ)
(terminate execution of the current function body and
have the function return OBJ)
(DEFUN return-test ()
(PRINT 'DOG) (RETURN 'CAT) (PRINT 'PIG) )
(return-test)
DOG
CAT
RESTART [] Function
(RESTART) § Єалў Ґв ўбҐ ®вЄалвлҐ д ©«л, ®вЄ §лў Ґвбп ®в
⥪г饩 б।л muLISP Ё ЁЁжЁЁагҐв ®ўго бЁб⥬г muLISP. ‚ᥠбўп§Ё
¬Ґ¦¤г ЇҐаҐ¬Ґл¬Ё, дгЄжЁЁ Ї®«м§®ў ⥫Ґ© Ё § 票п бў®©бвў ў
⥪г饩 б।Ґ а §аги овбп.
SYSTEM [integer] Function
(SYSTEM) § Єалў Ґв ўбҐ ®вЄалвлҐ д ©«л, § Є зЁў Ґв
ўлЇ®«ҐЁҐ muLISP Ё ў®§ўа й Ґв Є®ва®«м гЇа ў«по饩 Ћ‘.
…б«Ё бЁб⥬ а Ў®в Ґв Ї®¤ гЇа ў«ҐЁҐ¬ MS-DOS ўҐабЁЁ 2.00 Ё«Ё
ўлиҐ, в Є¦Ґ Ґб«Ё <楫®Ґ> Ґбвм ®«м Ё«Ё Ї®«®¦ЁвҐ«м®Ґ 楫®Ґ
зЁб«®, ¬ҐмиҐ, 祬 256, (SYSTEM 楫®Ґ_зЁб«®) ў®§ўа й ҐвЄ®¤ ўл室
( §лў Ґ¬л© ҐйҐ Є®¤®¬ ў®§ўа в ) <楫®Ј®_зЁб« > ¤«п гЇа ў«по饣®
Їа®жҐбб .
Љ®¤ ўл室 ¬®¦Ґв § Їа иЁў вмбп Є®¬ ¤®© MS-DOS "IF
ERRORLEVEN". …б«Ё <楫®Ґ_зЁб«®> ®вбгвбвўгҐв, muLISP ў®§ўа й Ґв
Є®¤ ў®§ўа в , Ї® 㬮«з Ёо еа пйЁ©бп ў бва ЁжҐ Ї ¬пвЁ muLISP.
ЏаЁ¬Ґа:
EXECUTE [program,command-line] Function
(EXECUTE Їа®Ја ¬¬ бва®Є -Є®¬ ¤) ЇаЁ®бв ў«Ёў Ґв muLISP,
§ ⥬ § Јаг¦ Ґв Ё ўлЇ®«пҐв <Їа®Ја ¬¬г>, ЇҐаҐ¤ ў п Ґ© ў Є зҐб⢥
аЈг¬Ґв <бва®Єг-Є®¬ ¤>. Љ®Ј¤ <Їа®Ја ¬¬ > § ўҐаи Ґвбп,
гЇа ў«ҐЁҐ ў®§ўа й Ґвбп Є muLISP, EXECUTE ў®§ўа й Ґв Є®¤ ўл室
Ё§ <Їа®Ја ¬¬л>. …б«Ё <Їа®Ја ¬¬ > Ґ ©¤Ґ , EXECUTE ў®§ўа й Ґв
NIL. Ћв¬ҐвЁ¬: EXECUTE ¤®бвгЇ в®«мЄ® в®Ј¤ , Є®Ј¤ muLISP
ўлЇ®«пҐвбп Ї®¤ гЇа ў«ҐЁҐ¬ MS-DOS ўҐабЁЁ 2.00 Ё ўлиҐ.
Ќ ЁЎ®«ҐҐ з бв® EXECUTE ЁбЇ®«м§гҐвбп ¤«п ўл§®ў ўв®аЁз®Ј®
Їа®жҐбб®а Є®¬ ¤ (б¬. "‚л§®ў ўв®аЁз®Ј® Їа®жҐбб®а Є®¬ ¤".
ђ §¤Ґ« MS-DOS Reference Manual). Ќ ЇаЁ¬Ґа, Ґб«Ё д ©« Їа®жҐбб®а
Є®¬ ¤ COMMAND.COM а §¬Ґй Ґвбп гбва®©б⢥ Ђ:, Є®¬ ¤ muLISP
(EXECUTE "A: COMMAND.COM" "/C DIR B:")
ўлᢥвЁв ᮤҐа¦Ё¬®Ґ д ©« гбва®©бвў® ‚.
5.17. ”гЄжЁЁ гЇа ў«ҐЁп Ї ¬пвмо
”гЄжЁп RECLAIM гЇа ў«пҐв а Ў®в®© бЎ®айЁЄ ¬гб®а Ё
ў®§ўа й Ґв १г«мвЁаго饥 Є®«ЁзҐбвў® бў®Ў®¤®© ®Ў« бвЁ ¤ ле.
’.Є. гЇа ў«ҐЁҐ Ї ¬пвмо ў muLISP Ї®«®бвмо ўв®¬ вЁ§Ёа®ў ®,
RECLAIM ЁбЇ®«м§гҐвбп в®«мЄ® ¤«п ®ЇаҐ¤Ґ«ҐЁп Є®«ЁзҐбвў бў®Ў®¤®©
Ї ¬пвЁ Ё«Ё ЇҐаҐ¤ а Ў®в®© ўаҐ¬Ґ®Ј® вҐбв - ¤«п ¬ЁЁ¬Ё§ жЁЁ
Є®«ЁзҐбвў бЎ®айЁЄ®ў ¬гб®а ў Їа®жҐббҐ а Ў®вл вҐбв . ‘Ёб⥬
гЇа ў«ҐЁп Ї ¬пвмо ў muLISP ®ЇЁб ў Ј«.4.
RECLAIM [ ] Function
(RECLAIM) гЇа ў«пҐв а Ў®в®© бЎ®айЁЄ ¬гб®а , ЁбЇа ў«пп
ҐЄ®а४влҐ бвагЄвгал ¤ ле ¤«п зҐвлаҐе ®Ў« б⥩ ¤ ле muLISP.
…б«Ё вॡгҐвбп, ўлЇ®«пҐвбп в Є¦Ґ ЇҐаҐа бЇаҐ¤Ґ«ҐЁҐ Ї ¬пвЁ.
‚®§ўа й Ґвбп Ёв®Ј®ў®Ґ зЁб«® Ў ©в®ў,¤®бвгЇле Ї®¤ ®Ў« б⨠⮬®ў,
ўҐЄв®а®ў, гЄ § ⥫Ґ© Ё б⥪®ўлҐ ®Ў« бвЁ.
ЏаЁ¬Ґа:
RECLAIM :'RECLAIM Control variable
…б«Ё Є®ва®«м п ЇҐаҐ¬Ґ п RECLAIM а ў NIL, Є®б®«м
ўлᢥ稢 Ґвбп Ёд®а¬ жЁ® п бв вЁбвЁЄ ¤® Ё Ї®б«Ґ а Ў®вл ўбҐе
бЎ®айЁЄ®ў ¬гб®а Ё ЇҐаҐа бЇаҐ¤Ґ«ҐЁп Ї ¬пвЁ. ЏҐаў п бва®Є
бв вЁбвЁЄЁ Ї®Є §лў Ґв, Є Є п ®Ў« бвм пў«пҐвбп ¤®бвгЇ®© ¤«п
а Ў®вл ¤® а Ў®вл бЎ®айЁЄ ¬гб®а . ‚в®а п бва®Є Ї®Є §лў Ґв
¤®бвгЇго ®Ў« бвм Ї®б«Ґ а Ў®вл бЎ®айЁЄ . ‘ва®ЄЁ, зЁ ойЁҐбп б
"GC", ®§ з ов бв вЁбвЁЄг бЎ®айЁЄ ¬гб®а ; бва®ЄЁ, зЁ ойЁҐбп
б "RA", ®§ з ов бв вЁбвЁЄг Їа®жҐбб ЇҐаҐа бЇаҐ¤Ґ«ҐЁп ®Ў« бвЁ
¤ ле. ”®а¬ в бва®ЄЁ бв вЁбвЁЄЁ б«Ґ¤гойЁ©:
GC : nnnn aaaa/aaaa vvvv/vvvv pppp/pppp ssss/ssss tttt/tttt
<nnnn>,<aaaa>,<vvvv>,<pppp>,<ssss> Ё <tttt> - нв® ЈҐЄб ¤ҐбпвЁзлҐ
зЁб« . <nnnn> - нв® Є®«ЁзҐбвў® бЎ®айЁЄ®ў ¬гб®а б ¬®¬Ґв з «
ўлЇ®«ҐЁп muLISP. ЏҐаўлҐ <aaaa>, <vvvv>, <pppp> Ё <ssss> ў
Є ¦¤®© Ї ॠзЁбҐ« - нв® б㬬 бў®Ў®¤®© Ї ¬пвЁ ў Ў ©в е ў
®Ў« бвпе ⮬®ў,ўҐЄв®а®ў, гЄ § ⥫Ґ© Ё б⥪®ў ᮮ⢥вб⢥®. ‚
Ј« ўҐ 4 ¤ Ґвбп § 票Ґ Є ¦¤®© Ё§ нвЁе ®Ў« б⥩. ЏҐаў п <tttt>
Ї ал - нв® Ї®« п б㬬 бў®Ў®¤ле ®Ў« б⥩ (в.Ґ. б㬬 <aaaa>,
<vvvv>, <pppp> Ё <ssss>). —Ёб« , б«Ґ¤гойЁҐ § "/" - нв® Ї®«л©
®ЎмҐ¬ ᮮ⢥вбвўгойЁе ®Ў« б⥩, ўЄ«оз ойЁе Ё бў®Ў®¤лҐ, Ё § пвлҐ
®Ў« бвЁ.
„«п Є ¦¤®© п祩ЄЁ гЄ § вҐ«п ў ®Ў« бвпе гЄ § ⥫Ґ©, б⥪®ў
Ё ⮬®ў вॡгҐвбп ¤ў Ў ©в . Ћ¤Ё Ў ©в вॡгҐвбп ¤«п Є ¦¤®Ј®
бЁ¬ў®« ў ђ-Ё¬ҐЁ, ¤ў Ў ©в - ¤«п а §¬ҐйҐЁп ¤«Ёл ђ-Ё¬ҐЁ.
—Ёб«®ўлҐ ўҐЄв®ал ЁбЇ®«м§гов бв®«мЄ® б«®ў, бЄ®«мЄ® Ґ®Ўе®¤Ё¬® ¤«п
а §¬ҐйҐЁп зЁб« ў ¤ў®Ёз®¬ ўЁ¤Ґ.
„ п бв вЁбвЁЄ бЁ«м® § ўЁбЁв ®в в®Ј®, Є Є а Ў®в Ґв
muLISP, Ё Ґ § ўЁбЁв ®в Ї®«м§®ў ⥫п. „ п бв вЁбвЁЄ
Ї®пў«пҐвбп ҐйҐ Ё в®Ј¤ , Є®Ј¤ ў®§ЁЄ Ґв ®иЁЎЄ "Memory full" Ё
гЄ §лў Ґв, Є Є п з бвм Ї ¬пвЁ ЇҐаҐЇ®«Ё« бм (б¬. Ј« ўг 4).
ЏаЁ¬Ґа:
(SETQ RECLAIM NIL)
(LOOP (OBLIST))
GC: 0001 2258/2600 1C8C/1C8E 00000/119C0 1AAA/1AC0 0598C/1770E
GC: 0001 2258/2600 1C8C/1C8E 117D0/119C0 1AAA/1AC0 1715C/1770E
RA: 0001 09C0/0D68 09C2/09C4 13CFE/13EEE 20DE/20F4 1715C/1770E
GC: 0002 09C0/0D68 09C2/09C4 00002/13EEE 20DE/20F4 03460/1770E
GC: 0002 09C0/0D68 09C2/09C4 13E1A/13EEE 20DE/20F4 17278/1770E
GC: 0003 09C0/0D68 09C2/09C4 00002/13EEE 20DE/20F4 03460/1770E
GC: 0003 09C0/0D68 09C2/09C4 13E1A/13EEE 20DE/20F4 17278/1770E
’аЁ бва®ЄЁ бв вЁбвЁЄЁ бЎ®айЁЄ ¬гб®а #1 ®§ з ов, зв®
Їа®Ё§®и«® ЇҐаҐа бЇаҐ¤Ґ«ҐЁҐ Ї ¬пвЁ. Ѓл«® ўл¤Ґ«Ґ® Ў®«миҐ Ї ¬пвЁ
Ї®¤ ®Ў« бвм гЄ § ⥫Ґ© Ё§-§ в®Ј®, зв® OBLIST вॡгҐв ®ўлҐ
cons-л. Џ®б«Ґ¤гойЁҐ бЎ®айЁЄЁ ¬гб®а Ґ ўлЇ®«пов
ЇҐаҐа бЇаҐ¤Ґ«ҐЁп, в.Є. а §¬Ґал ®Ў« б⥩ ¤ ле 㦥 Ўл«Ё
®ЇвЁ¬Ё§Ёа®ў л. Ћ¤ Є®, Ґб«Ё Їа®Ја ¬¬ Ё§¬ҐЁ« бм Ё бв ав®ў « ,
ЇаЁ¬Ґа, ®Ў« б⨠⮬®ў, ¬®¦Ґв Їа®Ё§®©вЁ ¤агЈ®Ґ
ЇҐаҐа бЇаҐ¤Ґ«ҐЁҐ б 楫мо 㢥«ЁзҐЁп а §¬Ґа нв®© ®Ў« бвЁ § бзҐв
¤агЈЁе.
—Ёб« , ЇаЁўҐ¤ҐлҐ ўлиҐ, § зЁвҐ«м® § ўЁбпв ®в а §¬Ґа®ў
Ї ¬пвЁ ќ‚Њ; §¤Ґбм ®Ё ¤ л ¤«п ўҐабЁЁ 8086/8088 muLISP.
*FREE-LIST*: '*FREE-LIST* Variable
”гЄжЁЁ Є®бвагЄв®а вॡгов б®§¤ Ёп ®ўле cons-®ў. …б«Ё
§ 票Ґ *FREE-LIST* - ⮬, в® ®Ў« бвм ¤«п ®ўле бons-®ў ЎҐаҐвбп
Ё§ ®Ў« бвЁ Ї ¬пвЁ, Є®в®а п §лў Ґвбп ®Ў« бвмо гЄ § ⥫Ґ©. …б«Ё
Ї®¤ б®§¤ ЁҐ ЇаҐ¤л¤гйЁе cons-®ў ўбп ®Ў« бвм гЄ § ⥫Ґ© Ўл«
ЁбзҐаЇ , в® ¤«п ў®ббв ®ў«ҐЁп ®Ў« б⥩ Ї®¤ cons-л
ўв®¬ вЁзҐбЄЁ § ЇгбЄ Ґвбп бЎ®айЁЄ ¬гб®а .
Ћ¤ Є® Ґб«Ё § 票Ґ *FREE-LIST* Ґбвм cons, в® нв®в cons
ЁбЇ®«м§гҐвбп в®Ј¤ , Є®Ј¤ ¤«п muLISP вॡгҐвбп ®ўл© cons.
ЌЁ¦Ґ ў ЇаЁ¬ҐаҐ ®бгйҐбвў«пҐвбп ¤®Ў ў«ҐЁҐ 6 (® Ґ 9) cons-®ў
Є *FREE-LIST*:
(SETQ JUNK '(A B (C D E) 3 4 5))
(SETQ *FREE-LIST* *NCONC JUNK *FREE-LIST*))
ALLOCATE [n] Function
…б«Ё <n> - Ї®«®¦ЁвҐ«м®Ґ 楫®Ґ, (ALLOCATE n) ®бў®Ў®¦¤ Ґв <n>
Ў ©в®ў Ї ¬пвЁ ў 8086-Є®¤®ў®¬ ᥣ¬ҐвҐ, б«Ґ¤го饬 § ¬ иЁл¬
Є®¤®¬ muLISP, Ё ў®§ўа й Ґв Ў §®ўл© ¤аҐб ў®ўм ўл¤Ґ«Ґ®© Ї ¬пвЁ.
…б«Ё Ґ«м§п ®бў®Ў®¤Ёвм <n> Ў ©в®ў, ALLOCATE ў®§ўа й Ґв NIL.
(ALLOCATE) ў®§ўа й Ґв ⥪гйЁ© Ў §®ўл© ¤аҐб з « бў®Ў®¤®©
®Ў« бвЁ ў 8086-Є®¤®ў®¬ ᥣ¬ҐвҐ, б«Ґ¤го饬 § ¬ иЁл¬ Є®¤®¬
muLISP.
ЏаҐ¦¤Ґ ўбҐЈ® ALLOCATE ЇаҐ¤ § зҐ ¤«п Є®¬ЇЁ«пв®а®ў,
ЈҐҐаЁагойЁе ¬ иЁлҐ Є®¤л.
ЏаЁ¬Ґа:
(DEFUN ALLOCATE (N)
((PLUSP N)
((there is sufficient free memory)
(free N bytes of memory following machine code)
(return base offset address of free space) ) )
(return base offset address of free space) )
(ALLOCATE 100) --> 32400 ;Frees 100 bytes at 32400
(ALLOCATE) --> 32512 ;Current start of free space
5.18. ”гЄжЁЁ б।л
’ҐЄгй п б। muLISP б®бв®Ёв Ё§ ўбҐе § 票© ЇҐаҐ¬Ґле,
®ЇаҐ¤Ґ«ҐЁ© дгЄжЁ© Ё § 票© бў®©бвў. ќвЁ § зҐЁп Ё
®ЇаҐ¤Ґ«ҐЁп ¬®Јгв Ўлвм ўўҐ¤Ґл ҐЇ®б।б⢥® б Є®б®«Ё, бзЁв л
Ё§ Ёб室®Ј® д ©« Ё«Ё § Јаг¦Ґл Ё§ SYS-д ©« . ”гЄжЁЁ баҐ¤л ¤ ов
ў®§¬®¦®бвм § Јаг¦ вм Ё б®еа пвм б।г muLISP ў ўЁ¤Ґ Є®¬Ї Євле
д ©«®ў - ®Ўа §®ў Ї ¬пвЁ. ’ Є®© д ©« ®Ўлз® б®§¤ Ґвбп в®«мЄ® Ї®б«Ґ
в®Ј®, Є Є Їа®Ја ¬¬ ®в« ¦Ґ ¤® Є®ж . ‡ Јаг§Є д ©«®ў-®Ўа §®ў
Ї ¬пвЁ ®бгйҐбвў«пҐвбп Ўлбв॥, 祬 бзЁвлў ЁҐ Ї®¤®Ўле Ёб室ле
д ©«®ў.
SAVE [drive:name.type] Function
…б«Ё <вЁЇ> - бва®Є , ®в«Ёз п ®в "COM", (SAVE
гбва®©бвў®:Ё¬п.вЁЇ) б®еа пҐв ⥪гйго б।г muLISP ў ўЁ¤Ґ
¤ў®Ёз®Ј® SYS-д ©« <Ё¬п.вЁЇ> <гбва®©б⢥>. …б«Ё <вЁЇ>
®вбгвбвўгҐв, SYS-д ©«г ЇаЁбў Ёў Ґвбп вЁЇ "SYS". …б«Ё ®вбгвбвўгҐв
<гбва®©бвў®>, SYS-д ©« б®еа пҐвбп ⥪г饬 § ॣЁбваЁа®ў ®¬
гбва®©б⢥.
(SAVE гбва®©бвў®:Ё¬п.COM) б®еа пҐв ЁвҐаЇаҐв в®а muLISP ЎҐ§
Є®¬ЇЁ«пв®а ЇбҐў¤®Є®¤®ў, в Є¦Ґ ⥪гйго б।г muLISP Є Є
ўлЇ®«Ё¬л© COM-д ©« <Ё¬п.COM> <гбва®©б⢥>. …б«Ё <гбва®©бвў®:>
®вбгвбвўгҐв, COM-д ©« б®еа пҐвбп ⥪г饬 § ॣЁбваЁа®ў ®¬
гбва®©б⢥. Џг⥬ ¬®¤ЁдЁЄ жЁЁ д« Ј ў ®б®ў®© бва®ЁжҐ muLISP
Ґбвм ў®§¬®¦®бвм б®еа Ёвм Ё Є®¬ЇЁ«пв®а ЇбҐў¤®Є®¤®ў ў COM-д ©« е,
б®§¤ ле SAVE (c¬. Ј« ўг 9 Ё ЏаЁ«®¦ҐЁҐ).
ЏаҐ¦¤Ґ 祬 б®еа Ёвм б।㠢 ўЁ¤Ґ SYS- Ё«Ё COM-д ©« , SAVE
ўв®¬ вЁзҐбЄЁ гЇ«®впҐв ўбҐ ЄвЁўлҐ бвагЄвгал ¤ ле, в Є зв®
१г«мвЁагойЁ© д ©« Ё¬ҐҐв ¬ЁЁ¬ «млҐ а §¬Ґал. ‘«Ґ¤®ў ⥫м®,
а §¬Ґа д ©« -®Ўа § Ї ¬п⨠㢥«ЁзЁў Ґвбп б 㢥«ЁзҐЁҐ¬ ®ЎмҐ¬
ЄвЁўле бвагЄвга ¤ ле.
’.Є. COM-д ©«л Ў®«миҐ, 祬 SYS-д ©«л, Ёе Є®¬ЇЁ«пв®ал
ЇбҐў¤®Є®¤®ў Ґ¤Ґ©б⢨⥫мл Ё ®Ё Ґ ¬®Јгв Ўлвм § Јаг¦Ґл ў
¤Ґ©бвўгойго бЁб⥬г muLISP, в® ¤«п б®еа ҐЁп б।л muLISP «гзиҐ
ЁбЇ®«м§®ў вм Ґ COM-, SYS-д ©«л, Ї® Єа ©Ґ© ¬ҐаҐ ў Їа®жҐббҐ
а §а Ў®вЄЁ Їа®Ја ¬¬.
…б«Ё ‘ЋЊ-д ©«, б®§¤ л© SAVE, ¬ҐмиҐ, 祬 64Љ (65536 Ў ©в),
в® ® ¬®¦Ґв ўлЇ®«пвмбп Є Є Є®¬ ¤ MS-DOS. …б«Ё ‘ЋЊ-д ©« Ў®«миҐ,
祬 64Љ, в® ® ¬®¦Ґв Ўлвм ЇаҐ®Ўа §®ў ў …•…-д ©« б
ЁбЇ®«м§®ў ЁҐ¬ гвЁ«Ёвл muLISP COMTOEXE.COM.
„ п гвЁ«Ёв Ё¬ҐҐв б«Ґ¤гойЁ© ўЁ¤:
drive1: COMTOEXE drive2: filename.COM drive3: ,
Ј¤Ґ <drive1> - нв® гбва®©бвў®, ᮤҐа¦ 饥 COMTOEXE.COM, <drive2>
- гбва®©бвў®, ᮤҐа¦ 饥 <filename>.COM, a <drive3> - гбва®©бвў®
Ї®¤ <filename>.EXE. ‹оЎ®Ґ ®вбгвбвўго饥 гбв®©бвў® § ¬ҐпҐвбп
⥪г饥 § ॣЁбваЁа®ў ®Ґ.
ЏаЁ¬Ґа:
(DEFUN SAVE (DRIVE:NAME.TYPE)
(close all currently open input and output files)
((SYMBOLP DRIVE:NAME.TYPE)
(RECLAIM)
((EQ TYPE "COM")
(disable the muLISP pseudo-code compiler)
(save muLISP and the current environment as
NAME.COM on DRIVE)
T )
(save a compact memory image of the current
environment as NAME.SYS on DRIVE)
T ) )
(SAVE 'B:WHALE) ;Saves WHALE.SYS on drive B:
(SAVE 'WHALE.COM) ;Saves WHALE.COM on logged drive
LOAD [drive:name.type] Function
(LOAD гбва®©бвў®:Ё¬п.вЁЇ) § ¬ҐпҐв ⥪гйго б।г muLISP
б।г, бгйҐбвў®ў ўиго ў® ўаҐ¬п б®§¤ Ёп д ©«
<гбва®©бвў®:Ё¬п.вЁЇ>. …б«Ё <.вЁЇ> ®вбгвбвўгҐв, ЇаЁбў Ёў Ґвбп вЁЇ
"SYS". …б«Ё <гбва®©бвў®:> ®вбгвбвўгҐв, SYS-д ©« § Јаг¦ Ґвбп
⥪г饥 §дॣЁбваЁа®ў ®Ґ гбва®©бвў®. LOAD Ґ ў®§ўа й Ґв
Є Є®Ј®-«ЁЎ® § 票п, Ґб«Ё SYS-д ©« гбЇҐи® § Ја㦥, ® зЁ Ґв
ўлЇ®«ҐЁҐ дгЄжЁЁ, бўп§ ®© б ЇҐаҐ¬Ґ®© DRIVER ў б।Ґ,
Є®в®а п 㦥 Ўл« § Ја㦥 . …б«Ё SYS-д ©« Ґ ©¤Ґ, LOAD
ў®§ўа й Ґв NIL.
SYS-д ©«л ¬®Јгв в Є¦Ґ Ўлвм § Јаг¦Ґл ў¬Ґб⥠б MULISP.COM,
ЁбЇ®«м§гп Є®¬ ¤г Ћ‘. ‘¬. а §¤Ґ« "SYS-д ©«л б।л" ў Ј« ўҐ 2.
ЏаЁ¬Ґа:
(DEFUN LOAD (DRIVE:NAME.TYPE)
(close all currently open input and output files)
((SYMBOLP DRIVE:NAME.TYPE)
((if the file DRIVE:NAME.TYPE exists)
(load the environment stored in the file)
(begin execution with the DRIVER function) ) ) )
(load 'b:WHALE) ;Loads WHALE.SYS from drive B:
5.19. ”гЄжЁЁ ЁвҐадҐ©б Ї®«м§®ў ⥫п
Ћб®ў®© ЁвҐадҐ©б Ї®«м§®ў ⥫п б muLISP ®ЎҐбЇҐзЁў Ґвбп
дгЄжЁҐ© жЁЄ« "з⥨Ґ-ўлзЁб«ҐЁҐ-ЇҐз вм" DRIVER.
Џ®б«Ґ ЁЁжЁ «Ё§ жЁЁ бў®Ґ© ®Ў« бвЁ ¤ ле, muLISP ўў®¤Ёв
ўлзЁб«пҐ¬л© ¤а ©ўҐа-жЁЄ« ўҐа奣® га®ўп, ¤ л© жЁЄ« ўҐа奣®
га®ўп гбв ў«Ёў Ґв ўгв२© бзҐвзЁЄ <break-level> ў 0,
Є®ва®«млҐ ЇҐаҐ¬ҐлҐ RDS Ё WRS - ў NIL, ¤Ґ« п Є®б®«м
®¤®ўаҐ¬Ґ® Ё ⥪гйЁ¬ ўе®¤л¬ Ёбв®зЁЄ®¬ (CIS) Ё ўл室л¬
Ї®в®Є®¬ (COS), гбв ў«Ёў Ґв Є®ва®«мго ЇҐаҐ¬Ґго READ-CHAR ў
'READ-CHAR, бва Ёў п ўў®¤ б Є®б®«Ё ¬Ґв®¤ «ЁҐ©®Ј®
। ЄвЁа®ў Ёп, зЁбвЁв ЎгдҐа «ЁҐ©®Ј® । ЄвЁа®ў Ёп Ё ўл§лў Ґв
⥪г饥 § 票Ґ ЇҐаҐ¬Ґ®© DRIVER.
(LOOP
(SETQ break-level 0)
(SETQ RDS NIL)
(SETQ WRS NIL)
(SETQ READ-CHAR 'READ-CHAR)
(CATCH NIL (FUNCALL DRIVER)) )
‡ 票Ґ ЇҐаҐ¬Ґ®© DRIVER, ЇаЁЁ ¬Ґ¬®Ґ Ї® 㬮«з Ёо, - нв®
дгЄжЁп DRIVER, Є®в®а п а бб¬ ваЁў Ґвбп Ё¦Ґ. Љ Є в®«мЄ® ®ў п
дгЄжЁп DRIVER ®ЇаҐ¤Ґ«Ґ , Є®¬ ¤ (RETURN) § ўҐаи Ґв ўлЇ®«ҐЁҐ
дгЄжЁЁ DRIVER, ®ЇаҐ¤Ґ«Ґ®© Ї® 㬮«з Ёо, ¤а ©ўҐа-жЁЄ«
ўҐа奣® га®ўп ЁЁжЁЁагҐв ®ўго дгЄжЁо DRIVER.
Ќ ЇаЁ¬ҐаҐ Ї®Є § ®, Є Є ®бгйҐбвў«Ґвбп жЁЄ«
"з⥨Ґ-ўлзЁб«ҐЁҐ-ЇҐз вм" ¤«п muLISP:
(DEFUN EVAL-QUOTE ()
(CATCH 'RETURN (LOOP (CATCH 'DRIVER
(PRINC ">")
(PRINT (APPLY (READ) (READ))) ))) )
(SETQ DRIVER 'EVAL-QUOTE)
(RETURN)
> CONS (DOG (CAT COW PIG))
(DOG CAT COW PIG)
DRIVER [ ] Function
(DRIVER) ®бгйҐбвў«пҐв ўлЇ®«ҐЁҐ жЁЄ« "з⥨Ґ-ўлзЁб«ҐЁҐ-
ЇҐз вм" ў muLISP. –ЁЄ« зЁ Ґвбп б ўлᢥ稢 Ёп ¤ЁбЇ«Ґ©
⥪г饣® га®ўп ЇаҐалў Ёп, Ґб«Ё ® Ґ г«Ґў®© (в.Ґ. DRIVER Ґ
ўл§лў Ґвбп ҐЇ®б।б⢥® жЁЄ«®¬ ўлб®Є®Ј® га®ўп).
‡ ⥬ ўлᢥ稢 Ґвбп ᮬў®« ¤®«« а muLISP. Ќ Є®Ґж, Ё§ CIS б
Ї®¬®ймо дгЄжЁЁ READ бзЁвлў Ґвбп ўла ¦ҐЁҐ, Є®в®а®Ґ ўлзЁб«пҐвбп б
Ї®¬®ймо дгЄжЁЁ EVAL, १г«мв в ЇҐаҐбл« Ґвбп ў COS б Ї®¬®ймо
дгЄжЁЁ PRINT.
ЏаЁ ЇаҐалў ЁЁ жЁЄ« "з⥨Ґ-ўлзЁб«ҐЁҐ-ЇҐз вм" ў 室Ґ
з⥨п, ўлзЁб«ҐЁп Ё«Ё ЇҐз вЁ ўла ¦ҐЁ© ®бгйҐбвў«пҐвбп ЇҐаҐе®¤
¬ҐвЄг DRIVER. „ п ў®§¬®¦®бвм Ї®§ў®«пҐв в ЄЁ¬ дгЄжЁп¬, Є Є
BREAK, ЇаҐалў вм ўлЇ®«ҐЁҐ Їа®Ја ¬¬л Ё ба §г ¦Ґ ЇҐаҐ¤ ў вм
гЇа ў«ҐЁҐ ⥪гйЁ© га®ўҐм жЁЄ« .
„ л© жЁЄ« Їа®¤®«¦ Ґвбп ¤® вҐе Ї®а, Ї®Є Ґ Ўг¤Ґв бзЁв ® Ё
ўлзЁб«Ґ® ўла ¦ҐЁҐ (RETURN value). ЏаЁ н⮬ жЁЄ« ЇаҐЄа й Ґвбп,
дгЄжЁп DRIVER ў®§ўа й Ґв <value> (<§ 票Ґ>).
„«п 㤮Ўбвў Їа®Ја ¬¬Ёа®ў Ёп Ї®б«Ґ¤ЁҐ ваЁ ўла ¦ҐЁп,
бзЁвлў Ґ¬лҐ жЁЄ«®¬, ¬®Јгв Ўлвм § ¬ҐҐл ЇҐаҐ¬Ґл¬Ё: +, ++ Ё +++
ᮮ⢥вб⢥®, १г«мв вл ўлзЁб«ҐЁп Ї®б«Ґ¤Ёе ваҐе ўла ¦ҐЁ©
- ЇҐаҐ¬Ґл¬Ё: *, ** Ё *** ᮮ⢥вб⢥®. ’ҐЄг饥 бзЁв ®Ґ
ўла ¦ҐЁҐ § ¬ҐпҐвбп ЇҐаҐ¬Ґ®© "-". Ќ ЇаЁ¬ҐаҐ Ї®Є § ®, Є Є
¬®¦® ЁбЇ®«м§®ў вм ¤ лҐ ЇҐаҐ¬ҐлҐ:
$ (CONS 'SAM '(ANN JOE SUE))
(SAM JOE SUE)
$ +
(CONS 'SAM '(ANN JOE SUE))
$ **
(SAM ANN JOE SUE)
(DEFUN DRIVER ()
(CATCH 'RETURN (LOOP (CATCH 'DRIVER
( ((ZEROP break-level))
(PRIN1 break-level) )
(PRINC "$ ")
(SETQ - (READ))
(PSETQ * (UNWIND-PROTECT (EVAL -)
(SETQ +++ ++ ++ + + -))
*** ** ** *)
(PRINT *) ))) )
(UNWIND-PROTECT д®а¬ 1 ... д®а¬ N) ўлзЁб«пҐв <д®а¬г1>,
§ ⥬ - ®бв ўиЁҐбп д®а¬л б Ї®¬®ймо Ґпў®Ј® PROGN, ¤ ¦Ґ Ґб«Ё
ўлзЁб«ҐЁҐ <д®а¬л1> § Є®зЁ«®бм ЇҐаҐе®¤®¬. Љ®Ј¤ ўлЇ®«ҐЁҐ PROGN
§ Є зЁў Ґвбп, UNWIND-PROTECT ў®§ўа й Ґв १г«мв в ўлзЁб«ҐЁп
<д®а¬л1>, Ґб«Ё ®® § Є®зЁ«®бм ®а¬ «м®. ‚ Їа®вЁў®¬ б«гз Ґ
дгЄжЁп Їа®¤®«¦ Ґв ўлЇ®«пвм ЇҐаҐе®¤, Ґб«Ё ўлзЁб«ҐЁҐ <д®а¬л1>
§ Є®зЁ«®бм ЇҐаҐе®¤®¬.
UNWIND-PROTECT 㤮ЎҐ ¤«п ЁбЇ®«м§®ў Ёп ў вҐе б«гз пе, Є®Ј¤
㦮 "ЇаЁўҐбвЁ ў Ї®а冷Є" зв®-«ЁЎ® Ї®б«Ґ ўлзЁб«ҐЁп <д®а¬л1>
Ґ§ ўЁбЁ¬® ®в в®Ј®, Є Є § ўҐаиЁ«®бм нв® ўлзЁб«ҐЁҐ. Ќ ЇаЁ¬Ґа,
¤ п д®а¬ Ўг¤Ґв Ј а вЁҐ© в®Ј®, зв® Ї®б«Ґ ўлзЁб«ҐЁп "ЇЁ" б
ўлб®Є®© в®з®бвмо ¤«п в®з®бвЁ Ўг¤Ґв ў®ббв ®ў«Ґ® ҐҐ
ЇҐаў® з «м®Ґ § 票Ґ, ¤ ¦Ґ Ґб«Ё ўлзЁб«ҐЁҐ "ЇЁ" Ўл«® ЇаҐаў ®
б Є« ўЁ вгал Ё«Ё ў®§ЁЄ« ®иЁЎЄ "Memory full".
ЏаЁ¬Ґа:
(PROGN (SETQ OLD-PRECISION (PRECISION))
(UNWIND-PROTECT (PROGN (PRECISION 100)
(COMPUTE-PI) )
(PRECISION OLD-PRECISION) ) )
THROW [label,object] Function
(THROW ¬ҐвЄ ®ЎмҐЄв) ҐЇ®б।б⢥® § Є зЁў Ґв ўлЇ®«ҐЁҐ
⥪г饣® ⥫ дгЄжЁЁ, ЇаЁбў Ёў Ґв ЇҐаҐ¬Ґ®© THROW § 票Ґ
<®ЎмҐЄв > Ё ЇҐаҐ¤ Ґв гЇа ў«ҐЁҐ ®Ўа в® ЇаҐ¤л¤гйЁ© CATCH,
Ё¬ҐойЁ© ¬ҐвЄг <¬ҐвЄ > Ё«Ё ¬ҐвЄг NIL. CATCH ў®§ўа й Ґв <®ЎмҐЄв>
(в.Ґ. § 票Ґ ЇҐаҐ¬Ґ®© THROW). …б«Ё CATCH Ґ ©¤Ґ,
гЇа ў«ҐЁҐ ў®§ўа й Ґвбп Є ўлЇ®«Ё¬®¬г ¤а ©ўҐаг muLISP.
Ћв¬ҐвЁ¬, зв® THROW - нв® ўлзЁб«пҐ¬ п дгЄжЁп, Ї®н⮬г
<¬ҐвЄ > Ё <®ЎмҐЄв> ўлзЁб«повбп ¤® в®Ј®, Є Є ў®§ЁЄ Ґв ЇҐаҐе®¤.
ЏаЁ¬Ґа:
(DEFUN THROW (LABEL EXPN)
(SETQ THROW EXPN)
(activate the throw flag)
(unwind the variable and control stacks until a CATCH with
a matching label or the NIL label is found, or the
top-level muLISP executive loop is reached) )
(CATCH 'FOO (PRINT 'DOG)
(CATCH 'BAR (PRINT 'CAT)
(THROW 'FOO 'COW)
(PRINT 'PIG) )
(PRINT 'RAT) )
DOG
CAT
COW
RETURN [object Function
(RETURN ®ЎмҐЄв) ЇаЁ®бв ў«Ёў Ґв ўлЇ®«ҐЁҐ дгЄжЁЁ,
ᮤҐа¦ 饩 RETURN, а бЄагзЁў Ґв (unwinds) б⥪Ё Ё ў®§ўа й Ґв
<®ЎмҐЄв> ў Є зҐб⢥ бў®ҐЈ® § 票п.
ЏаЁ¬Ґа:
(DEFUN RETURN (OBJ)
(terminate execution of the current function body and
have the function return OBJ)
(DEFUN return-test ()
(PRINT 'DOG) (RETURN 'CAT) (PRINT 'PIG) )
(return-test)
DOG
CAT
RESTART [] Function
(RESTART) § Єалў Ґв ўбҐ ®вЄалвлҐ д ©«л, ®вЄ §лў Ґвбп ®в
⥪г饩 б।л muLISP Ё ЁЁжЁЁагҐв ®ўго бЁб⥬г muLISP. ‚ᥠбўп§Ё
¬Ґ¦¤г ЇҐаҐ¬Ґл¬Ё, дгЄжЁЁ Ї®«м§®ў ⥫Ґ© Ё § 票п бў®©бвў ў
⥪г饩 б।Ґ а §аги овбп.
SYSTEM [integer] Function
(SYSTEM) § Єалў Ґв ўбҐ ®вЄалвлҐ д ©«л, § Є зЁў Ґв
ўлЇ®«ҐЁҐ muLISP Ё ў®§ўа й Ґв Є®ва®«м гЇа ў«по饩 Ћ‘.
…б«Ё бЁб⥬ а Ў®в Ґв Ї®¤ гЇа ў«ҐЁҐ¬ MS-DOS ўҐабЁЁ 2.00 Ё«Ё
ўлиҐ, в Є¦Ґ Ґб«Ё <楫®Ґ> Ґбвм ®«м Ё«Ё Ї®«®¦ЁвҐ«м®Ґ 楫®Ґ
зЁб«®, ¬ҐмиҐ, 祬 256, (SYSTEM 楫®Ґ_зЁб«®) ў®§ўа й ҐвЄ®¤ ўл室
( §лў Ґ¬л© ҐйҐ Є®¤®¬ ў®§ўа в ) <楫®Ј®_зЁб« > ¤«п гЇа ў«по饣®
Їа®жҐбб .
Љ®¤ ўл室 ¬®¦Ґв § Їа иЁў вмбп Є®¬ ¤®© MS-DOS "IF
ERRORLEVEN". …б«Ё <楫®Ґ_зЁб«®> ®вбгвбвўгҐв, muLISP ў®§ўа й Ґв
Є®¤ ў®§ўа в , Ї® 㬮«з Ёо еа пйЁ©бп ў бва ЁжҐ Ї ¬пвЁ muLISP.
ЏаЁ¬Ґа:
EXECUTE [program,command-line] Function
(EXECUTE Їа®Ја ¬¬ бва®Є -Є®¬ ¤) ЇаЁ®бв ў«Ёў Ґв muLISP,
§ ⥬ § Јаг¦ Ґв Ё ўлЇ®«пҐв <Їа®Ја ¬¬г>, ЇҐаҐ¤ ў п Ґ© ў Є зҐб⢥
аЈг¬Ґв <бва®Єг-Є®¬ ¤>. Љ®Ј¤ <Їа®Ја ¬¬ > § ўҐаи Ґвбп,
гЇа ў«ҐЁҐ ў®§ўа й Ґвбп Є muLISP, EXECUTE ў®§ўа й Ґв Є®¤ ўл室
Ё§ <Їа®Ја ¬¬л>. …б«Ё <Їа®Ја ¬¬ > Ґ ©¤Ґ , EXECUTE ў®§ўа й Ґв
NIL. Ћв¬ҐвЁ¬: EXECUTE ¤®бвгЇ в®«мЄ® в®Ј¤ , Є®Ј¤ muLISP
ўлЇ®«пҐвбп Ї®¤ гЇа ў«ҐЁҐ¬ MS-DOS ўҐабЁЁ 2.00 Ё ўлиҐ.
Ќ ЁЎ®«ҐҐ з бв® EXECUTE ЁбЇ®«м§гҐвбп ¤«п ўл§®ў ўв®аЁз®Ј®
Їа®жҐбб®а Є®¬ ¤ (б¬. "‚л§®ў ўв®аЁз®Ј® Їа®жҐбб®а Є®¬ ¤".
ђ §¤Ґ« MS-DOS Reference Manual). Ќ ЇаЁ¬Ґа, Ґб«Ё д ©« Їа®жҐбб®а
Є®¬ ¤ COMMAND.COM а §¬Ґй Ґвбп гбва®©б⢥ Ђ:, Є®¬ ¤ muLISP
(EXECUTE "A: COMMAND.COM" "/C DIR B:")
ўлᢥвЁв ᮤҐа¦Ё¬®Ґ д ©« гбва®©бвў® ‚.
5.17. ”гЄжЁЁ гЇа ў«ҐЁп Ї ¬пвмо
”гЄжЁп RECLAIM гЇа ў«пҐв а Ў®в®© бЎ®айЁЄ ¬гб®а Ё
ў®§ўа й Ґв १г«мвЁаго饥 Є®«ЁзҐбвў® бў®Ў®¤®© ®Ў« бвЁ ¤ ле.
’.Є. гЇа ў«ҐЁҐ Ї ¬пвмо ў muLISP Ї®«®бвмо ўв®¬ вЁ§Ёа®ў ®,
RECLAIM ЁбЇ®«м§гҐвбп в®«мЄ® ¤«п ®ЇаҐ¤Ґ«ҐЁп Є®«ЁзҐбвў бў®Ў®¤®©
Ї ¬пвЁ Ё«Ё ЇҐаҐ¤ а Ў®в®© ўаҐ¬Ґ®Ј® вҐбв - ¤«п ¬ЁЁ¬Ё§ жЁЁ
Є®«ЁзҐбвў бЎ®айЁЄ®ў ¬гб®а ў Їа®жҐббҐ а Ў®вл вҐбв . ‘Ёб⥬
гЇа ў«ҐЁп Ї ¬пвмо ў muLISP ®ЇЁб ў Ј«.4.
RECLAIM [ ] Function
(RECLAIM) гЇа ў«пҐв а Ў®в®© бЎ®айЁЄ ¬гб®а , ЁбЇа ў«пп
ҐЄ®а४влҐ бвагЄвгал ¤ ле ¤«п зҐвлаҐе ®Ў« б⥩ ¤ ле muLISP.
…б«Ё вॡгҐвбп, ўлЇ®«пҐвбп в Є¦Ґ ЇҐаҐа бЇаҐ¤Ґ«ҐЁҐ Ї ¬пвЁ.
‚®§ўа й Ґвбп Ёв®Ј®ў®Ґ зЁб«® Ў ©в®ў,¤®бвгЇле Ї®¤ ®Ў« б⨠⮬®ў,
ўҐЄв®а®ў, гЄ § ⥫Ґ© Ё б⥪®ўлҐ ®Ў« бвЁ.
ЏаЁ¬Ґа:
RECLAIM :'RECLAIM Control variable
…б«Ё Є®ва®«м п ЇҐаҐ¬Ґ п RECLAIM а ў NIL, Є®б®«м
ўлᢥ稢 Ґвбп Ёд®а¬ жЁ® п бв вЁбвЁЄ ¤® Ё Ї®б«Ґ а Ў®вл ўбҐе
бЎ®айЁЄ®ў ¬гб®а Ё ЇҐаҐа бЇаҐ¤Ґ«ҐЁп Ї ¬пвЁ. ЏҐаў п бва®Є
бв вЁбвЁЄЁ Ї®Є §лў Ґв, Є Є п ®Ў« бвм пў«пҐвбп ¤®бвгЇ®© ¤«п
а Ў®вл ¤® а Ў®вл бЎ®айЁЄ ¬гб®а . ‚в®а п бва®Є Ї®Є §лў Ґв
¤®бвгЇго ®Ў« бвм Ї®б«Ґ а Ў®вл бЎ®айЁЄ . ‘ва®ЄЁ, зЁ ойЁҐбп б
"GC", ®§ з ов бв вЁбвЁЄг бЎ®айЁЄ ¬гб®а ; бва®ЄЁ, зЁ ойЁҐбп
б "RA", ®§ з ов бв вЁбвЁЄг Їа®жҐбб ЇҐаҐа бЇаҐ¤Ґ«ҐЁп ®Ў« бвЁ
¤ ле. ”®а¬ в бва®ЄЁ бв вЁбвЁЄЁ б«Ґ¤гойЁ©:
GC : nnnn aaaa/aaaa vvvv/vvvv pppp/pppp ssss/ssss tttt/tttt
<nnnn>,<aaaa>,<vvvv>,<pppp>,<ssss> Ё <tttt> - нв® ЈҐЄб ¤ҐбпвЁзлҐ
зЁб« . <nnnn> - нв® Є®«ЁзҐбвў® бЎ®айЁЄ®ў ¬гб®а б ¬®¬Ґв з «
ўлЇ®«ҐЁп muLISP. ЏҐаўлҐ <aaaa>, <vvvv>, <pppp> Ё <ssss> ў
Є ¦¤®© Ї ॠзЁбҐ« - нв® б㬬 бў®Ў®¤®© Ї ¬пвЁ ў Ў ©в е ў
®Ў« бвпе ⮬®ў,ўҐЄв®а®ў, гЄ § ⥫Ґ© Ё б⥪®ў ᮮ⢥вб⢥®. ‚
Ј« ўҐ 4 ¤ Ґвбп § 票Ґ Є ¦¤®© Ё§ нвЁе ®Ў« б⥩. ЏҐаў п <tttt>
Ї ал - нв® Ї®« п б㬬 бў®Ў®¤ле ®Ў« б⥩ (в.Ґ. б㬬 <aaaa>,
<vvvv>, <pppp> Ё <ssss>). —Ёб« , б«Ґ¤гойЁҐ § "/" - нв® Ї®«л©
®ЎмҐ¬ ᮮ⢥вбвўгойЁе ®Ў« б⥩, ўЄ«оз ойЁе Ё бў®Ў®¤лҐ, Ё § пвлҐ
®Ў« бвЁ.
„«п Є ¦¤®© п祩ЄЁ гЄ § вҐ«п ў ®Ў« бвпе гЄ § ⥫Ґ©, б⥪®ў
Ё ⮬®ў вॡгҐвбп ¤ў Ў ©в . Ћ¤Ё Ў ©в вॡгҐвбп ¤«п Є ¦¤®Ј®
бЁ¬ў®« ў ђ-Ё¬ҐЁ, ¤ў Ў ©в - ¤«п а §¬ҐйҐЁп ¤«Ёл ђ-Ё¬ҐЁ.
—Ёб«®ўлҐ ўҐЄв®ал ЁбЇ®«м§гов бв®«мЄ® б«®ў, бЄ®«мЄ® Ґ®Ўе®¤Ё¬® ¤«п
а §¬ҐйҐЁп зЁб« ў ¤ў®Ёз®¬ ўЁ¤Ґ.
„ п бв вЁбвЁЄ бЁ«м® § ўЁбЁв ®в в®Ј®, Є Є а Ў®в Ґв
muLISP, Ё Ґ § ўЁбЁв ®в Ї®«м§®ў ⥫п. „ п бв вЁбвЁЄ
Ї®пў«пҐвбп ҐйҐ Ё в®Ј¤ , Є®Ј¤ ў®§ЁЄ Ґв ®иЁЎЄ "Memory full" Ё
гЄ §лў Ґв, Є Є п з бвм Ї ¬пвЁ ЇҐаҐЇ®«Ё« бм (б¬. Ј« ўг 4).
ЏаЁ¬Ґа:
(SETQ RECLAIM NIL)
(LOOP (OBLIST))
GC: 0001 2258/2600 1C8C/1C8E 00000/119C0 1AAA/1AC0 0598C/1770E
GC: 0001 2258/2600 1C8C/1C8E 117D0/119C0 1AAA/1AC0 1715C/1770E
RA: 0001 09C0/0D68 09C2/09C4 13CFE/13EEE 20DE/20F4 1715C/1770E
GC: 0002 09C0/0D68 09C2/09C4 00002/13EEE 20DE/20F4 03460/1770E
GC: 0002 09C0/0D68 09C2/09C4 13E1A/13EEE 20DE/20F4 17278/1770E
GC: 0003 09C0/0D68 09C2/09C4 00002/13EEE 20DE/20F4 03460/1770E
GC: 0003 09C0/0D68 09C2/09C4 13E1A/13EEE 20DE/20F4 17278/1770E
’аЁ бва®ЄЁ бв вЁбвЁЄЁ бЎ®айЁЄ ¬гб®а #1 ®§ з ов, зв®
Їа®Ё§®и«® ЇҐаҐа бЇаҐ¤Ґ«ҐЁҐ Ї ¬пвЁ. Ѓл«® ўл¤Ґ«Ґ® Ў®«миҐ Ї ¬пвЁ
Ї®¤ ®Ў« бвм гЄ § ⥫Ґ© Ё§-§ в®Ј®, зв® OBLIST вॡгҐв ®ўлҐ
cons-л. Џ®б«Ґ¤гойЁҐ бЎ®айЁЄЁ ¬гб®а Ґ ўлЇ®«пов
ЇҐаҐа бЇаҐ¤Ґ«ҐЁп, в.Є. а §¬Ґал ®Ў« б⥩ ¤ ле 㦥 Ўл«Ё
®ЇвЁ¬Ё§Ёа®ў л. Ћ¤ Є®, Ґб«Ё Їа®Ја ¬¬ Ё§¬ҐЁ« бм Ё бв ав®ў « ,
ЇаЁ¬Ґа, ®Ў« б⨠⮬®ў, ¬®¦Ґв Їа®Ё§®©вЁ ¤агЈ®Ґ
ЇҐаҐа бЇаҐ¤Ґ«ҐЁҐ б 楫мо 㢥«ЁзҐЁп а §¬Ґа нв®© ®Ў« бвЁ § бзҐв
¤агЈЁе.
—Ёб« , ЇаЁўҐ¤ҐлҐ ўлиҐ, § зЁвҐ«м® § ўЁбпв ®в а §¬Ґа®ў
Ї ¬пвЁ ќ‚Њ; §¤Ґбм ®Ё ¤ л ¤«п ўҐабЁЁ 8086/8088 muLISP.
*FREE-LIST*: '*FREE-LIST* Variable
”гЄжЁЁ Є®бвагЄв®а вॡгов б®§¤ Ёп ®ўле cons-®ў. …б«Ё
§ 票Ґ *FREE-LIST* - ⮬, в® ®Ў« бвм ¤«п ®ўле бons-®ў ЎҐаҐвбп
Ё§ ®Ў« бвЁ Ї ¬пвЁ, Є®в®а п §лў Ґвбп ®Ў« бвмо гЄ § ⥫Ґ©. …б«Ё
Ї®¤ б®§¤ ЁҐ ЇаҐ¤л¤гйЁе cons-®ў ўбп ®Ў« бвм гЄ § ⥫Ґ© Ўл«
ЁбзҐаЇ , в® ¤«п ў®ббв ®ў«ҐЁп ®Ў« б⥩ Ї®¤ cons-л
ўв®¬ вЁзҐбЄЁ § ЇгбЄ Ґвбп бЎ®айЁЄ ¬гб®а .
Ћ¤ Є® Ґб«Ё § 票Ґ *FREE-LIST* Ґбвм cons, в® нв®в cons
ЁбЇ®«м§гҐвбп в®Ј¤ , Є®Ј¤ ¤«п muLISP вॡгҐвбп ®ўл© cons.
ЌЁ¦Ґ ў ЇаЁ¬ҐаҐ ®бгйҐбвў«пҐвбп ¤®Ў ў«ҐЁҐ 6 (® Ґ 9) cons-®ў
Є *FREE-LIST*:
(SETQ JUNK '(A B (C D E) 3 4 5))
(SETQ *FREE-LIST* *NCONC JUNK *FREE-LIST*))
ALLOCATE [n] Function
…б«Ё <n> - Ї®«®¦ЁвҐ«м®Ґ 楫®Ґ, (ALLOCATE n) ®бў®Ў®¦¤ Ґв <n>
Ў ©в®ў Ї ¬пвЁ ў 8086-Є®¤®ў®¬ ᥣ¬ҐвҐ, б«Ґ¤го饬 § ¬ иЁл¬
Є®¤®¬ muLISP, Ё ў®§ўа й Ґв Ў §®ўл© ¤аҐб ў®ўм ўл¤Ґ«Ґ®© Ї ¬пвЁ.
…б«Ё Ґ«м§п ®бў®Ў®¤Ёвм <n> Ў ©в®ў, ALLOCATE ў®§ўа й Ґв NIL.
(ALLOCATE) ў®§ўа й Ґв ⥪гйЁ© Ў §®ўл© ¤аҐб з « бў®Ў®¤®©
®Ў« бвЁ ў 8086-Є®¤®ў®¬ ᥣ¬ҐвҐ, б«Ґ¤го饬 § ¬ иЁл¬ Є®¤®¬
muLISP.
ЏаҐ¦¤Ґ ўбҐЈ® ALLOCATE ЇаҐ¤ § зҐ ¤«п Є®¬ЇЁ«пв®а®ў,
ЈҐҐаЁагойЁе ¬ иЁлҐ Є®¤л.
ЏаЁ¬Ґа:
(DEFUN ALLOCATE (N)
((PLUSP N)
((there is sufficient free memory)
(free N bytes of memory following machine code)
(return base offset address of free space) ) )
(return base offset address of free space) )
(ALLOCATE 100) --> 32400 ;Frees 100 bytes at 32400
(ALLOCATE) --> 32512 ;Current start of free space
5.18. ”гЄжЁЁ б।л
’ҐЄгй п б। muLISP б®бв®Ёв Ё§ ўбҐе § 票© ЇҐаҐ¬Ґле,
®ЇаҐ¤Ґ«ҐЁ© дгЄжЁ© Ё § 票© бў®©бвў. ќвЁ § зҐЁп Ё
®ЇаҐ¤Ґ«ҐЁп ¬®Јгв Ўлвм ўўҐ¤Ґл ҐЇ®б।б⢥® б Є®б®«Ё, бзЁв л
Ё§ Ёб室®Ј® д ©« Ё«Ё § Јаг¦Ґл Ё§ SYS-д ©« . ”гЄжЁЁ баҐ¤л ¤ ов
ў®§¬®¦®бвм § Јаг¦ вм Ё б®еа пвм б।г muLISP ў ўЁ¤Ґ Є®¬Ї Євле
д ©«®ў - ®Ўа §®ў Ї ¬пвЁ. ’ Є®© д ©« ®Ўлз® б®§¤ Ґвбп в®«мЄ® Ї®б«Ґ
в®Ј®, Є Є Їа®Ја ¬¬ ®в« ¦Ґ ¤® Є®ж . ‡ Јаг§Є д ©«®ў-®Ўа §®ў
Ї ¬пвЁ ®бгйҐбвў«пҐвбп Ўлбв॥, 祬 бзЁвлў ЁҐ Ї®¤®Ўле Ёб室ле
д ©«®ў.
SAVE [drive:name.type] Function
…б«Ё <вЁЇ> - бва®Є , ®в«Ёз п ®в "COM", (SAVE
гбва®©бвў®:Ё¬п.вЁЇ) б®еа пҐв ⥪гйго б।г muLISP ў ўЁ¤Ґ
¤ў®Ёз®Ј® SYS-д ©« <Ё¬п.вЁЇ> <гбва®©б⢥>. …б«Ё <вЁЇ>
®вбгвбвўгҐв, SYS-д ©«г ЇаЁбў Ёў Ґвбп вЁЇ "SYS". …б«Ё ®вбгвбвўгҐв
<гбва®©бвў®>, SYS-д ©« б®еа пҐвбп ⥪г饬 § ॣЁбваЁа®ў ®¬
гбва®©б⢥.
(SAVE гбва®©бвў®:Ё¬п.COM) б®еа пҐв ЁвҐаЇаҐв в®а muLISP ЎҐ§
Є®¬ЇЁ«пв®а ЇбҐў¤®Є®¤®ў, в Є¦Ґ ⥪гйго б।г muLISP Є Є
ўлЇ®«Ё¬л© COM-д ©« <Ё¬п.COM> <гбва®©б⢥>. …б«Ё <гбва®©бвў®:>
®вбгвбвўгҐв, COM-д ©« б®еа пҐвбп ⥪г饬 § ॣЁбваЁа®ў ®¬
гбва®©б⢥. Џг⥬ ¬®¤ЁдЁЄ жЁЁ д« Ј ў ®б®ў®© бва®ЁжҐ muLISP
Ґбвм ў®§¬®¦®бвм б®еа Ёвм Ё Є®¬ЇЁ«пв®а ЇбҐў¤®Є®¤®ў ў COM-д ©« е,
б®§¤ ле SAVE (c¬. Ј« ўг 9 Ё ЏаЁ«®¦ҐЁҐ).
ЏаҐ¦¤Ґ 祬 б®еа Ёвм б।㠢 ўЁ¤Ґ SYS- Ё«Ё COM-д ©« , SAVE
ўв®¬ вЁзҐбЄЁ гЇ«®впҐв ўбҐ ЄвЁўлҐ бвагЄвгал ¤ ле, в Є зв®
१г«мвЁагойЁ© д ©« Ё¬ҐҐв ¬ЁЁ¬ «млҐ а §¬Ґал. ‘«Ґ¤®ў ⥫м®,
а §¬Ґа д ©« -®Ўа § Ї ¬п⨠㢥«ЁзЁў Ґвбп б 㢥«ЁзҐЁҐ¬ ®ЎмҐ¬
ЄвЁўле бвагЄвга ¤ ле.
’.Є. COM-д ©«л Ў®«миҐ, 祬 SYS-д ©«л, Ёе Є®¬ЇЁ«пв®ал
ЇбҐў¤®Є®¤®ў Ґ¤Ґ©б⢨⥫мл Ё ®Ё Ґ ¬®Јгв Ўлвм § Јаг¦Ґл ў
¤Ґ©бвўгойго бЁб⥬г muLISP, в® ¤«п б®еа ҐЁп б।л muLISP «гзиҐ
ЁбЇ®«м§®ў вм Ґ COM-, SYS-д ©«л, Ї® Єа ©Ґ© ¬ҐаҐ ў Їа®жҐббҐ
а §а Ў®вЄЁ Їа®Ја ¬¬.
…б«Ё ‘ЋЊ-д ©«, б®§¤ л© SAVE, ¬ҐмиҐ, 祬 64Љ (65536 Ў ©в),
в® ® ¬®¦Ґв ўлЇ®«пвмбп Є Є Є®¬ ¤ MS-DOS. …б«Ё ‘ЋЊ-д ©« Ў®«миҐ,
祬 64Љ, в® ® ¬®¦Ґв Ўлвм ЇаҐ®Ўа §®ў ў …•…-д ©« б
ЁбЇ®«м§®ў ЁҐ¬ гвЁ«Ёвл muLISP COMTOEXE.COM.
„ п гвЁ«Ёв Ё¬ҐҐв б«Ґ¤гойЁ© ўЁ¤:
drive1: COMTOEXE drive2: filename.COM drive3: ,
Ј¤Ґ <drive1> - нв® гбва®©бвў®, ᮤҐа¦ 饥 COMTOEXE.COM, <drive2>
- гбва®©бвў®, ᮤҐа¦ 饥 <filename>.COM, a <drive3> - гбва®©бвў®
Ї®¤ <filename>.EXE. ‹оЎ®Ґ ®вбгвбвўго饥 гбв®©бвў® § ¬ҐпҐвбп
⥪г饥 § ॣЁбваЁа®ў ®Ґ.
ЏаЁ¬Ґа:
(DEFUN SAVE (DRIVE:NAME.TYPE)
(close all currently open input and output files)
((SYMBOLP DRIVE:NAME.TYPE)
(RECLAIM)
((EQ TYPE "COM")
(disable the muLISP pseudo-code compiler)
(save muLISP and the current environment as
NAME.COM on DRIVE)
T )
(save a compact memory image of the current
environment as NAME.SYS on DRIVE)
T ) )
(SAVE 'B:WHALE) ;Saves WHALE.SYS on drive B:
(SAVE 'WHALE.COM) ;Saves WHALE.COM on logged drive
LOAD [drive:name.type] Function
(LOAD гбва®©бвў®:Ё¬п.вЁЇ) § ¬ҐпҐв ⥪гйго б।г muLISP
б।г, бгйҐбвў®ў ўиго ў® ўаҐ¬п б®§¤ Ёп д ©«
<гбва®©бвў®:Ё¬п.вЁЇ>. …б«Ё <.вЁЇ> ®вбгвбвўгҐв, ЇаЁбў Ёў Ґвбп вЁЇ
"SYS". …б«Ё <гбва®©бвў®:> ®вбгвбвўгҐв, SYS-д ©« § Јаг¦ Ґвбп
⥪г饥 §дॣЁбваЁа®ў ®Ґ гбва®©бвў®. LOAD Ґ ў®§ўа й Ґв
Є Є®Ј®-«ЁЎ® § 票п, Ґб«Ё SYS-д ©« гбЇҐи® § Ја㦥, ® зЁ Ґв
ўлЇ®«ҐЁҐ дгЄжЁЁ, бўп§ ®© б ЇҐаҐ¬Ґ®© DRIVER ў б।Ґ,
Є®в®а п 㦥 Ўл« § Ја㦥 . …б«Ё SYS-д ©« Ґ ©¤Ґ, LOAD
ў®§ўа й Ґв NIL.
SYS-д ©«л ¬®Јгв в Є¦Ґ Ўлвм § Јаг¦Ґл ў¬Ґб⥠б MULISP.COM,
ЁбЇ®«м§гп Є®¬ ¤г Ћ‘. ‘¬. а §¤Ґ« "SYS-д ©«л б।л" ў Ј« ўҐ 2.
ЏаЁ¬Ґа:
(DEFUN LOAD (DRIVE:NAME.TYPE)
(close all currently open input and output files)
((SYMBOLP DRIVE:NAME.TYPE)
((if the file DRIVE:NAME.TYPE exists)
(load the environment stored in the file)
(begin execution with the DRIVER function) ) ) )
(load 'b:WHALE) ;Loads WHALE.SYS from drive B:
5.19. ”гЄжЁЁ ЁвҐадҐ©б Ї®«м§®ў ⥫п
Ћб®ў®© ЁвҐадҐ©б Ї®«м§®ў ⥫п б muLISP ®ЎҐбЇҐзЁў Ґвбп
дгЄжЁҐ© жЁЄ« "з⥨Ґ-ўлзЁб«ҐЁҐ-ЇҐз вм" DRIVER.
Џ®б«Ґ ЁЁжЁ «Ё§ жЁЁ бў®Ґ© ®Ў« бвЁ ¤ ле, muLISP ўў®¤Ёв
ўлзЁб«пҐ¬л© ¤а ©ўҐа-жЁЄ« ўҐа奣® га®ўп, ¤ л© жЁЄ« ўҐа奣®
га®ўп гбв ў«Ёў Ґв ўгв२© бзҐвзЁЄ <break-level> ў 0,
Є®ва®«млҐ ЇҐаҐ¬ҐлҐ RDS Ё WRS - ў NIL, ¤Ґ« п Є®б®«м
®¤®ўаҐ¬Ґ® Ё ⥪гйЁ¬ ўе®¤л¬ Ёбв®зЁЄ®¬ (CIS) Ё ўл室л¬
Ї®в®Є®¬ (COS), гбв ў«Ёў Ґв Є®ва®«мго ЇҐаҐ¬Ґго READ-CHAR ў
'READ-CHAR, бва Ёў п ўў®¤ б Є®б®«Ё ¬Ґв®¤ «ЁҐ©®Ј®
। ЄвЁа®ў Ёп, зЁбвЁв ЎгдҐа «ЁҐ©®Ј® । ЄвЁа®ў Ёп Ё ўл§лў Ґв
⥪г饥 § 票Ґ ЇҐаҐ¬Ґ®© DRIVER.
(LOOP
(SETQ break-level 0)
(SETQ RDS NIL)
(SETQ WRS NIL)
(SETQ READ-CHAR 'READ-CHAR)
(CATCH NIL (FUNCALL DRIVER)) )
‡ 票Ґ ЇҐаҐ¬Ґ®© DRIVER, ЇаЁЁ ¬Ґ¬®Ґ Ї® 㬮«з Ёо, - нв®
дгЄжЁп DRIVER, Є®в®а п а бб¬ ваЁў Ґвбп Ё¦Ґ. Љ Є в®«мЄ® ®ў п
дгЄжЁп DRIVER ®ЇаҐ¤Ґ«Ґ , Є®¬ ¤ (RETURN) § ўҐаи Ґв ўлЇ®«ҐЁҐ
дгЄжЁЁ DRIVER, ®ЇаҐ¤Ґ«Ґ®© Ї® 㬮«з Ёо, ¤а ©ўҐа-жЁЄ«
ўҐа奣® га®ўп ЁЁжЁЁагҐв ®ўго дгЄжЁо DRIVER.
Ќ ЇаЁ¬ҐаҐ Ї®Є § ®, Є Є ®бгйҐбвў«Ґвбп жЁЄ«
"з⥨Ґ-ўлзЁб«ҐЁҐ-ЇҐз вм" ¤«п muLISP:
(DEFUN EVAL-QUOTE ()
(CATCH 'RETURN (LOOP (CATCH 'DRIVER
(PRINC ">")
(PRINT (APPLY (READ) (READ))) ))) )
(SETQ DRIVER 'EVAL-QUOTE)
(RETURN)
> CONS (DOG (CAT COW PIG))
(DOG CAT COW PIG)
DRIVER [ ] Function
(DRIVER) ®бгйҐбвў«пҐв ўлЇ®«ҐЁҐ жЁЄ« "з⥨Ґ-ўлзЁб«ҐЁҐ-
ЇҐз вм" ў muLISP. –ЁЄ« зЁ Ґвбп б ўлᢥ稢 Ёп ¤ЁбЇ«Ґ©
⥪г饣® га®ўп ЇаҐалў Ёп, Ґб«Ё ® Ґ г«Ґў®© (в.Ґ. DRIVER Ґ
ўл§лў Ґвбп ҐЇ®б।б⢥® жЁЄ«®¬ ўлб®Є®Ј® га®ўп).
‡ ⥬ ўлᢥ稢 Ґвбп ᮬў®« ¤®«« а muLISP. Ќ Є®Ґж, Ё§ CIS б
Ї®¬®ймо дгЄжЁЁ READ бзЁвлў Ґвбп ўла ¦ҐЁҐ, Є®в®а®Ґ ўлзЁб«пҐвбп б
Ї®¬®ймо дгЄжЁЁ EVAL, १г«мв в ЇҐаҐбл« Ґвбп ў COS б Ї®¬®ймо
дгЄжЁЁ PRINT.
ЏаЁ ЇаҐалў ЁЁ жЁЄ« "з⥨Ґ-ўлзЁб«ҐЁҐ-ЇҐз вм" ў 室Ґ
з⥨п, ўлзЁб«ҐЁп Ё«Ё ЇҐз вЁ ўла ¦ҐЁ© ®бгйҐбвў«пҐвбп ЇҐаҐе®¤
¬ҐвЄг DRIVER. „ п ў®§¬®¦®бвм Ї®§ў®«пҐв в ЄЁ¬ дгЄжЁп¬, Є Є
BREAK, ЇаҐалў вм ўлЇ®«ҐЁҐ Їа®Ја ¬¬л Ё ба §г ¦Ґ ЇҐаҐ¤ ў вм
гЇа ў«ҐЁҐ ⥪гйЁ© га®ўҐм жЁЄ« .
„ л© жЁЄ« Їа®¤®«¦ Ґвбп ¤® вҐе Ї®а, Ї®Є Ґ Ўг¤Ґв бзЁв ® Ё
ўлзЁб«Ґ® ўла ¦ҐЁҐ (RETURN value). ЏаЁ н⮬ жЁЄ« ЇаҐЄа й Ґвбп,
дгЄжЁп DRIVER ў®§ўа й Ґв <value> (<§ 票Ґ>).
„«п 㤮Ўбвў Їа®Ја ¬¬Ёа®ў Ёп Ї®б«Ґ¤ЁҐ ваЁ ўла ¦ҐЁп,
бзЁвлў Ґ¬лҐ жЁЄ«®¬, ¬®Јгв Ўлвм § ¬ҐҐл ЇҐаҐ¬Ґл¬Ё: +, ++ Ё +++
ᮮ⢥вб⢥®, १г«мв вл ўлзЁб«ҐЁп Ї®б«Ґ¤Ёе ваҐе ўла ¦ҐЁ©
- ЇҐаҐ¬Ґл¬Ё: *, ** Ё *** ᮮ⢥вб⢥®. ’ҐЄг饥 бзЁв ®Ґ
ўла ¦ҐЁҐ § ¬ҐпҐвбп ЇҐаҐ¬Ґ®© "-". Ќ ЇаЁ¬ҐаҐ Ї®Є § ®, Є Є
¬®¦® ЁбЇ®«м§®ў вм ¤ лҐ ЇҐаҐ¬ҐлҐ:
$ (CONS 'SAM '(ANN JOE SUE))
(SAM JOE SUE)
$ +
(CONS 'SAM '(ANN JOE SUE))
$ **
(SAM ANN JOE SUE)
(DEFUN DRIVER ()
(CATCH 'RETURN (LOOP (CATCH 'DRIVER
( ((ZEROP break-level))
(PRIN1 break-level) )
(PRINC "$ ")
(SETQ - (READ))
(PSETQ * (UNWIND-PROTECT (EVAL -)
(SETQ +++ ++ ++ + + -))
*** ** ** *)
(PRINT *) ))) )
Соседние файлы в папке Filp