
Добавил:
Kaz
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
BREAK [object,message] Function
(BREAK ®ЎмҐЄв б®®ЎйҐЁҐ) ЇаЁ®бв ў«Ёў Ґв ўлЇ®«ҐЁҐ
Їа®Ја ¬¬л Ё ўл¤ Ґв Є®б®«м бЁ¬ў®« <б®®ЎйҐЁҐ>, бва®Єг "Break"
Ё <®ЎмҐЄв>, гЄ §лў п ЇаЁзЁг ЇаҐалў Ёп. …б«Ё <б®®ЎйҐЁҐ> Ґбвм
NIL Ё«Ё ®вбгвбвўгҐв, ¤ п бва®Є Ґ ўлзЁб«пҐвбп. „ «ҐҐ ўл¤ Ґвбп
бва®Є Ї®¤бЄ §ЄЁ ў ўЁ¤Ґ ®ЇжЁ© ЇаҐалў Ёп:
Continue, Break, Abort, Top-level, Restart, System?
‡ ⥬ бЁб⥬ ¦¤Ґв, Ї®Є Ї®«м§®ў вҐ«м ўлЎҐаҐв ®¤г Ё§ ®ЇжЁ©,
гЄ § ў ЇҐаўго ЎгЄўг ҐҐ Ё¬ҐЁ (C, B, A, T Ё«Ё S). Ћв¬ҐвЁ¬, зв®
¤ лҐ ®ЇжЁЁ ЇҐаҐзЁб«Ґл ў Ї®ап¤ЄҐ гбЁ«ҐЁп Ёе ¤Ґ©бвўЁп. …б«Ё
Ї®б«Ґ ҐбЄ®«мЄЁе ᥪ㤠Ї®«м§®ў вҐ«м Ґ ўлЎа « ®ЇжЁо,
ЈҐҐаЁагҐвбп Єа вЄ®Ґ б®®ЎйҐЁҐ, Ёд®а¬Ёаго饥 Ї®«м§®ў вҐ«п ®
ў®§ЁЄ®ўҐЁЁ ЇаҐалў Ёп.
- Continue (Їа®¤®«¦Ёвм): <®ЎмҐЄв> ў®§ўа й Ґвбп Є Є § 票Ґ
ЇаҐалў Ёп, ўлЇ®«ҐЁҐ Їа®¤®«¦ Ґвбп, Є Є Ё ЇаҐ¦¤Ґ.
- Break (®бв ®ў): ўаҐ¬Ґ® ЇаЁ®бв ў«Ёў Ґв ўлЇ®«ҐЁҐ
ЇаҐалў Ёп. READ-CHAR гбв ў«Ёў Ґвбп ў 'READ-CHAR, Ї®н⮬㠢ў®¤
б Є®б®«Ё Ўг¤Ґв ўлЇ®«пвмбп бЇ®б®Ў®¬ «ЁҐ©®Ј® । ЄвЁа®ў Ёп;
ЇҐаҐ¬Ґ®© BREAK гбв ў«Ёў Ґвбп § 票Ґ <®ЎмҐЄв>, ўгв२©
бзҐвзЁЄ <га®ўҐм-ЇаҐалў Ёп> (<break-level>) 㢥«ЁзЁў Ґвбп.
”гЄжЁп DRIVER ўл§лў Ґвбп ¤«п в®Ј®, зв®Ўл ¤ вм Ї®«м§®ў ⥫о
ў®§¬®¦®бвм Їа®ўҐаЁвм, Є Є п б। ЇаҐ¤®бв ў«пҐвбп Ґ¬г ў® ўаҐ¬п
ў®§ЁЄ®ўҐЁп ®бв ®ў . DRIVER ўлᢥ稢 Ґв <break-level> б
Ї®¤бЄ §Є®© ¤а ©ўҐа Є Є Ї®¬Ё ЁҐ ® ⮬, зв® ўлЇ®«пҐвбп
®бв ®ў.
„«п ўл室 Ё§ ®бв ®ў Ё ў®§ўа в Є ўл§лў о饩 Їа®Ја ¬¬Ґ
б«Ґ¤®¬ § Ї®¤бЄ §Є®© ЇаҐалў Ёп ЎҐаЁвҐ Є®¬ ¤г
(RETURN form) ,
Ј¤Ґ <form> (<д®а¬ >) - нв® ўла ¦ҐЁҐ, Є®в®а®Ґ ўлзЁб«пҐвбп, Ё
¦¬ЁвҐ Є« ўЁиг <RETURN>. Ќ ЇаЁ¬Ґа, зв®Ўл ўлзЁб«Ёвм Ё ў®§ўа вЁвм
<®ЎмҐЄв>, ЇҐаҐ¤ л© б Ї®¬®ймо ўл§®ў BREAK ў Є зҐб⢥ § 票п
дгЄжЁЁ BREAK, ўўҐ¤ЁвҐ:
(RETURN (EVAL BREAK))
ЏаЁ ўл室Ґ Ё§ ¤а ©ўҐа <break-level> 㬥ми Ґвбп; READCH Ё
BREAK ў®ббв ў«Ёў ов бў®Ё ЇҐаў® з «млҐ § 票п; § 票Ґ
ўла ¦ҐЁп, Є®в®а®Ґ ўў®¤Ёвбп б«Ґ¤®¬ § RETURN , ў®§ўа й Ґвбп Є Є
§ 票Ґ ®бв ®ў .
- Abort (ЇаҐалў ЁҐ): ЇаҐалў Ґв ўлзЁб«ҐЁҐ ў Їа®жҐббҐ
®бв ®ў Ё ЇҐаҐ¤ Ґв гЇа ў«ҐЁҐ Ї®б«Ґ¤Ґ¬г Ё§ ЇаҐ¤л¤гйЁе
Ї®¬ҐзҐле DRIVER (®Ўлз® - жЁЄ« "з⥨Ґ-ўлзЁб«ҐЁҐ-ЇҐз вм").
- Top-level (ўҐаеЁ© га®ўҐм): ЇаҐалў Ґв ўлзЁб«ҐЁҐ ў
Їа®жҐбᥠ®бв ®ў Ё ЇҐаҐ¤ Ґв гЇа ў«ҐЁҐ Ї®б«Ґ¤Ґ¬г Ё§ ЇаҐ¤л¤гйЁе
Ї®¬ҐзҐле NIL (®«Ўлз® - жЁЄ« ¤а ©ўҐа ўҐа奣® га®ўп).
- Restart (Ї®ўв®ал© бв ав): § Єалў Ґв ўбҐ ®вЄалвлҐ д ©«л,
®вЄ §лў Ґвбп ®в ⥪г饩 б।л muLISP Ё ЁЁжЁЁагҐв ®ўго бЁб⥬г
muLISP.
- System (бЁб⥬ ): § Єалў Ґв ўбҐ ®вЄалвлҐ д ©«л, § ўҐаи Ґв
ўлЇ®«ҐЁҐ muLISP Ё ў®§ўа й Ґв гЇа ў«ҐЁҐ Ћ‘.
Љ Є в®«мЄ® muLISP ®Ў аг¦Ёв б®бв®пЁҐ ®иЁЎЄЁ, ўл§лў Ґвбп
BREAK б ®иЁЎ®з®© дгЄжЁҐ© Ё ᮮ⢥вбвўгойЁ¬ б®®ЎйҐЁҐ¬ ®Ў
®иЁЎЄҐ, Ї®§ў®«пойЁ¬Ё Ї®«м§®ў вҐ«о ЇаЁпвм ®ЇаҐ¤Ґ«Ґ®Ґ аҐиҐЁҐ.
BREAK ¬®¦Ґв Ўлвм ЇҐаҐ®ЇаҐ¤Ґ«Ґ Ї®«м§®ў ⥫Ґ¬ ¤«п
㤮ў«Ґвў®аҐЁп ¤агЈЁ¬ вॡ®ў Ёп¬. Џ®б।бвў®¬ ўўҐ¤ҐЁп ўл§®ў®ў
BREAK ў ®ЇаҐ¤Ґ«ҐЁп дгЄжЁ© Ї ЄҐв ЇаҐалў Ё© ®ЎҐбЇҐзЁв ®в«Ёзл©
¬Ґе Ё§¬ ®в« ¤ЄЁ. Ћ ¤ бв ў ¬ ў®§¬®¦®бвм Їа®ўҐапвм Ё Ё§¬Ґпвм
§ зҐЁп ЇҐаҐ¬Ґле Ё ®ЇаҐ¤Ґ«ҐЁп дгЄжЁ© ЇҐаҐ¤ з «®¬
ўлзЁб«ҐЁ©.
ЏаЁ¬Ґа:
(DEFUN BREAK (BREAK MSG
CHAR RDS WRS READ-CHAR )
( (NULL MSG))
(PRINC MSG)
(WRITE-STRING " Break: ")
(PRINT BREAK) )
(WRITE-STRING "Abort,Break,Continue,Top-level,Restart,System? ")
(lOOP
(WRITE-BYTE 7)
(SETQ CHAR (STRING-UPCASE (READ-CHAR)))
((EQ CHAR 'A)
(THROW 'DRIVER BREAK) )
((EQ CHAR 'B)
(SETQ READ-CHAR 'READ-CHAR)
(INCQ break-level)
(CLEAR-INPUT)
(SETQ BREAK (DRIVER))
(DECQ break-level)
BREAK )
((EQ CHAR 'C)
BREAK )
((EQ CHAR 'T)
(THROW NIL BREAK) )
((EQ CHAR 'R)
(RESTART) )
((EQ CHAR 'S)
(SYSTEM) ) ) )
5.20. ”гЄжЁЁ ЁвҐадҐ©б ’Ћ
”гЄжЁЁ, Є®в®алҐ а бб¬ ваЁў овбп ў ¤ ®¬ а §¤Ґ«Ґ,
®ЎҐбЇҐзЁў ов ў§ Ё¬®бўп§м ¬Ґ¦¤г Їа®Ја ¬¬ ¬Ё muLISP, ’Ћ ќ‚Њ Ё Ћ‘
(б¬. в Є¦Ґ ’ҐеЁзҐбЄЁҐ ४®¬Ґ¤ жЁЁ ќ‚Њ Ё агЄ®ў®¤бвў® Ї® Ћ‘).
MEMORY [address,value,flag] Function
…б«Ё < ddress> (< ¤аҐб>) - ®«м Ё«Ё Ї®«®¦ЁвҐ«м®Ґ 楫®Ґ,
¬Ґм襥, 祬 ®Ў« бвм Ї ¬пвЁ ¬ЁЄа®Їа®жҐбб®а , Є®в®а®¬ а Ў®в Ґв
muLISP, (MEMORY ¤аҐб) ЇҐаҐ¤ Ґв Ў ©в (в.Ґ. 8-ЎЁв®ў®Ґ § 票Ґ) ў
< ¤аҐб>.
…б«Ё <value> (<§ 票Ґ>) - ®«м Ё«Ё Ї®«®¦ЁвҐ«м®Ґ 楫®Ґ,
¬Ґм襥, 祬 256, (MEMORY ¤аҐб § 票Ґ) § Ї®¬Ё Ґв <§ 票Ґ>
Ў ©в Ї® < ¤аҐбг> Ё ў®§ўа й Ґв ЇҐаў® з «м®Ґ § 票Ґ Ў ©в .
…б«Ё <flag> (<д« Ј>) - Ґ NIL, (MEMORY ¤аҐб § 票Ґ д« Ј)
ЇҐаҐ¤ Ґв б«®ў® (в.Ґ. 16-ЎЁв®ў®Ґ § 票Ґ) ў < ¤аҐб>. …б«Ё
<§ 票Ґ> - ®«м Ё«Ё Ї®«®¦ЁвҐ«м®Ґ 楫®Ґ, ¬Ґм襥, 祬 65536,
(MEMORY ¤аҐб § 票Ґ д« Ј) § Ї®¬Ё Ґв <§ 票Ґ> б«®ў Ї®
< ¤аҐбг> Ё ў®§ўа й Ґв ЇҐаў® з «м®Ґ § 票Ґ б«®ў .
ЏаҐ¤гЇаҐ¦¤ҐЁҐ: MEMORY ¤®«¦ ЁбЇ®«м§®ў вмбп ®зҐм
®бв®а®¦®, в.Є. ®вбгвбвўгҐв § йЁв ®в а §агиҐЁп ЁвҐаЇаҐв в®а
muLISP Ё«Ё агЄ®ў®¤п饩 Ћ‘.
ЏаЁ¬Ґа:
(DEFUN MEMORY (ADDR VALUE FLAG)
((<= 0 ADDR (the address space of the processor))
((NULL FLAG)
((<= 0 VALUE 255)
(replace the byte at ADDR with VALUE)
(return the original byte at ADDR) )
(return the byte at ADDR) )
((<= 0 VALUE 65536)
(replace the word at ADDR with VALUE)
(return the original word at ADDR) )
(return the word at ADDR) ) )
(SETQ *PRINT-BASE* 16 *READ-BASE* 16) ;Hexadecimal I/O
(MEMORY 12) --> 0 ;Byte at 12H
(MEMORY 12 NIL T) --> 0F000 ;Word at 12H
(MEMORY 12 5) --> 0 ;Store 5 at 12H
(MEMORY 12) --> 5 ;Byte at 12H
(MEMORY 12 NIL T) --> 0F005 ;Word at 12H
(MEMORY 12 0) --> 5 ;Restore original byte
(SETQ *PRINT-BASE* 0A *READ-CHAR* 0A) ;Decimal I/O
CSMEMORY [offset,value,flag] Function
DSMEMORY [offset,value,flag] Function
CSMEMORY Ё DSMEMORY ¤®бвгЇл в®«мЄ® в®Ј¤ , Є®Ј¤ muLISP
а Ў®в Ґв ќ‚Њ ᥬҐ©бвў Intel 8086 ¬ЁЄа®Їа®жҐбб®а®ў. ќвЁ
дгЄжЁЁ Ї®¤®Ўл дгЄжЁЁ MEMORY, § ЁбЄ«о票Ґ¬ в®Ј®, зв® §¤Ґбм
ЇҐаўл© аЈг¬Ґв - нв® 16-ЎЁв®ў®Ґ Ї®«Ґ ᥣ¬Ґв , Ґ 20-ЎЁв®ўл©
дЁ§ЁзҐбЄЁ© ¤аҐб. ЏҐаў®Ґ Ї®«Ґ CSMEMORY Ї®¤®Ў® ᥣ¬Ґвг Є®¤ . ‚
DSMEMORY ЇҐаў®Ґ Ї®«Ґ ᮮ⢥вбвўгҐв ᥣ¬Ґвг ¤ ле.
…б«Ё <offset> - ®«м Ё«Ё Ї®«®¦ЁвҐ«м®Ґ 楫®Ґ, ¬ҐмиҐ, 祬
65536, (CSMEMORY offset) Ё (DSMEMORY offset) ЇҐаҐбл« ов Ў ©в ў
<offset>.
…б«Ё <§ 票Ґ> - ®«м Ё«Ё Ї®«®¦ЁвҐ«м®Ґ 楫®Ґ ¬ҐмиҐ, 祬
256, (CSMEMORY offset § 票Ґ) Ё (DSMEMORY offset § 票Ґ)
§ ЇЁблў ов <§ 票Ґ> Ў ©в ў <offset> Ё ў®§ўа й ов
ЇҐаў® з «м®Ґ § 票Ґ Ў ©в .
…б«Ё <д« Ј> - Ґ NIL, (CSMEMORY offset NIL д« Ј) Ё (DSMEMORY
offset NIL д« Ј) ў®§ўа й ов б«®ў® ў <offset>. …б«Ё <§ 票Ґ> -
-®«м Ё«Ё Ї®«®¦ЁвҐ«м®Ґ 楫®Ґ ¬ҐмиҐ, 祬 65536, (CSMEMORY offset
§ 票Ґ д« Ј) Ё (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-н«Ґ¬Ґв ¬Ё Є ¦¤®Ј® бЇЁбЄ , Ё в.¤. ¤® вҐе Ї®а, Ї®Є Є ¦¤л©
бЇЁб®Є Ґ Ўг¤Ґв ЁбзҐаЇ . ЊЂђ‘ ў®§ўа
(BREAK ®ЎмҐЄв б®®ЎйҐЁҐ) ЇаЁ®бв ў«Ёў Ґв ўлЇ®«ҐЁҐ
Їа®Ја ¬¬л Ё ўл¤ Ґв Є®б®«м бЁ¬ў®« <б®®ЎйҐЁҐ>, бва®Єг "Break"
Ё <®ЎмҐЄв>, гЄ §лў п ЇаЁзЁг ЇаҐалў Ёп. …б«Ё <б®®ЎйҐЁҐ> Ґбвм
NIL Ё«Ё ®вбгвбвўгҐв, ¤ п бва®Є Ґ ўлзЁб«пҐвбп. „ «ҐҐ ўл¤ Ґвбп
бва®Є Ї®¤бЄ §ЄЁ ў ўЁ¤Ґ ®ЇжЁ© ЇаҐалў Ёп:
Continue, Break, Abort, Top-level, Restart, System?
‡ ⥬ бЁб⥬ ¦¤Ґв, Ї®Є Ї®«м§®ў вҐ«м ўлЎҐаҐв ®¤г Ё§ ®ЇжЁ©,
гЄ § ў ЇҐаўго ЎгЄўг ҐҐ Ё¬ҐЁ (C, B, A, T Ё«Ё S). Ћв¬ҐвЁ¬, зв®
¤ лҐ ®ЇжЁЁ ЇҐаҐзЁб«Ґл ў Ї®ап¤ЄҐ гбЁ«ҐЁп Ёе ¤Ґ©бвўЁп. …б«Ё
Ї®б«Ґ ҐбЄ®«мЄЁе ᥪ㤠Ї®«м§®ў вҐ«м Ґ ўлЎа « ®ЇжЁо,
ЈҐҐаЁагҐвбп Єа вЄ®Ґ б®®ЎйҐЁҐ, Ёд®а¬Ёаго饥 Ї®«м§®ў вҐ«п ®
ў®§ЁЄ®ўҐЁЁ ЇаҐалў Ёп.
- Continue (Їа®¤®«¦Ёвм): <®ЎмҐЄв> ў®§ўа й Ґвбп Є Є § 票Ґ
ЇаҐалў Ёп, ўлЇ®«ҐЁҐ Їа®¤®«¦ Ґвбп, Є Є Ё ЇаҐ¦¤Ґ.
- Break (®бв ®ў): ўаҐ¬Ґ® ЇаЁ®бв ў«Ёў Ґв ўлЇ®«ҐЁҐ
ЇаҐалў Ёп. READ-CHAR гбв ў«Ёў Ґвбп ў 'READ-CHAR, Ї®н⮬㠢ў®¤
б Є®б®«Ё Ўг¤Ґв ўлЇ®«пвмбп бЇ®б®Ў®¬ «ЁҐ©®Ј® । ЄвЁа®ў Ёп;
ЇҐаҐ¬Ґ®© BREAK гбв ў«Ёў Ґвбп § 票Ґ <®ЎмҐЄв>, ўгв२©
бзҐвзЁЄ <га®ўҐм-ЇаҐалў Ёп> (<break-level>) 㢥«ЁзЁў Ґвбп.
”гЄжЁп DRIVER ўл§лў Ґвбп ¤«п в®Ј®, зв®Ўл ¤ вм Ї®«м§®ў ⥫о
ў®§¬®¦®бвм Їа®ўҐаЁвм, Є Є п б। ЇаҐ¤®бв ў«пҐвбп Ґ¬г ў® ўаҐ¬п
ў®§ЁЄ®ўҐЁп ®бв ®ў . DRIVER ўлᢥ稢 Ґв <break-level> б
Ї®¤бЄ §Є®© ¤а ©ўҐа Є Є Ї®¬Ё ЁҐ ® ⮬, зв® ўлЇ®«пҐвбп
®бв ®ў.
„«п ўл室 Ё§ ®бв ®ў Ё ў®§ўа в Є ўл§лў о饩 Їа®Ја ¬¬Ґ
б«Ґ¤®¬ § Ї®¤бЄ §Є®© ЇаҐалў Ёп ЎҐаЁвҐ Є®¬ ¤г
(RETURN form) ,
Ј¤Ґ <form> (<д®а¬ >) - нв® ўла ¦ҐЁҐ, Є®в®а®Ґ ўлзЁб«пҐвбп, Ё
¦¬ЁвҐ Є« ўЁиг <RETURN>. Ќ ЇаЁ¬Ґа, зв®Ўл ўлзЁб«Ёвм Ё ў®§ўа вЁвм
<®ЎмҐЄв>, ЇҐаҐ¤ л© б Ї®¬®ймо ўл§®ў BREAK ў Є зҐб⢥ § 票п
дгЄжЁЁ BREAK, ўўҐ¤ЁвҐ:
(RETURN (EVAL BREAK))
ЏаЁ ўл室Ґ Ё§ ¤а ©ўҐа <break-level> 㬥ми Ґвбп; READCH Ё
BREAK ў®ббв ў«Ёў ов бў®Ё ЇҐаў® з «млҐ § 票п; § 票Ґ
ўла ¦ҐЁп, Є®в®а®Ґ ўў®¤Ёвбп б«Ґ¤®¬ § RETURN , ў®§ўа й Ґвбп Є Є
§ 票Ґ ®бв ®ў .
- Abort (ЇаҐалў ЁҐ): ЇаҐалў Ґв ўлзЁб«ҐЁҐ ў Їа®жҐббҐ
®бв ®ў Ё ЇҐаҐ¤ Ґв гЇа ў«ҐЁҐ Ї®б«Ґ¤Ґ¬г Ё§ ЇаҐ¤л¤гйЁе
Ї®¬ҐзҐле DRIVER (®Ўлз® - жЁЄ« "з⥨Ґ-ўлзЁб«ҐЁҐ-ЇҐз вм").
- Top-level (ўҐаеЁ© га®ўҐм): ЇаҐалў Ґв ўлзЁб«ҐЁҐ ў
Їа®жҐбᥠ®бв ®ў Ё ЇҐаҐ¤ Ґв гЇа ў«ҐЁҐ Ї®б«Ґ¤Ґ¬г Ё§ ЇаҐ¤л¤гйЁе
Ї®¬ҐзҐле NIL (®«Ўлз® - жЁЄ« ¤а ©ўҐа ўҐа奣® га®ўп).
- Restart (Ї®ўв®ал© бв ав): § Єалў Ґв ўбҐ ®вЄалвлҐ д ©«л,
®вЄ §лў Ґвбп ®в ⥪г饩 б।л muLISP Ё ЁЁжЁЁагҐв ®ўго бЁб⥬г
muLISP.
- System (бЁб⥬ ): § Єалў Ґв ўбҐ ®вЄалвлҐ д ©«л, § ўҐаи Ґв
ўлЇ®«ҐЁҐ muLISP Ё ў®§ўа й Ґв гЇа ў«ҐЁҐ Ћ‘.
Љ Є в®«мЄ® muLISP ®Ў аг¦Ёв б®бв®пЁҐ ®иЁЎЄЁ, ўл§лў Ґвбп
BREAK б ®иЁЎ®з®© дгЄжЁҐ© Ё ᮮ⢥вбвўгойЁ¬ б®®ЎйҐЁҐ¬ ®Ў
®иЁЎЄҐ, Ї®§ў®«пойЁ¬Ё Ї®«м§®ў вҐ«о ЇаЁпвм ®ЇаҐ¤Ґ«Ґ®Ґ аҐиҐЁҐ.
BREAK ¬®¦Ґв Ўлвм ЇҐаҐ®ЇаҐ¤Ґ«Ґ Ї®«м§®ў ⥫Ґ¬ ¤«п
㤮ў«Ґвў®аҐЁп ¤агЈЁ¬ вॡ®ў Ёп¬. Џ®б।бвў®¬ ўўҐ¤ҐЁп ўл§®ў®ў
BREAK ў ®ЇаҐ¤Ґ«ҐЁп дгЄжЁ© Ї ЄҐв ЇаҐалў Ё© ®ЎҐбЇҐзЁв ®в«Ёзл©
¬Ґе Ё§¬ ®в« ¤ЄЁ. Ћ ¤ бв ў ¬ ў®§¬®¦®бвм Їа®ўҐапвм Ё Ё§¬Ґпвм
§ зҐЁп ЇҐаҐ¬Ґле Ё ®ЇаҐ¤Ґ«ҐЁп дгЄжЁ© ЇҐаҐ¤ з «®¬
ўлзЁб«ҐЁ©.
ЏаЁ¬Ґа:
(DEFUN BREAK (BREAK MSG
CHAR RDS WRS READ-CHAR )
( (NULL MSG))
(PRINC MSG)
(WRITE-STRING " Break: ")
(PRINT BREAK) )
(WRITE-STRING "Abort,Break,Continue,Top-level,Restart,System? ")
(lOOP
(WRITE-BYTE 7)
(SETQ CHAR (STRING-UPCASE (READ-CHAR)))
((EQ CHAR 'A)
(THROW 'DRIVER BREAK) )
((EQ CHAR 'B)
(SETQ READ-CHAR 'READ-CHAR)
(INCQ break-level)
(CLEAR-INPUT)
(SETQ BREAK (DRIVER))
(DECQ break-level)
BREAK )
((EQ CHAR 'C)
BREAK )
((EQ CHAR 'T)
(THROW NIL BREAK) )
((EQ CHAR 'R)
(RESTART) )
((EQ CHAR 'S)
(SYSTEM) ) ) )
5.20. ”гЄжЁЁ ЁвҐадҐ©б ’Ћ
”гЄжЁЁ, Є®в®алҐ а бб¬ ваЁў овбп ў ¤ ®¬ а §¤Ґ«Ґ,
®ЎҐбЇҐзЁў ов ў§ Ё¬®бўп§м ¬Ґ¦¤г Їа®Ја ¬¬ ¬Ё muLISP, ’Ћ ќ‚Њ Ё Ћ‘
(б¬. в Є¦Ґ ’ҐеЁзҐбЄЁҐ ४®¬Ґ¤ жЁЁ ќ‚Њ Ё агЄ®ў®¤бвў® Ї® Ћ‘).
MEMORY [address,value,flag] Function
…б«Ё < ddress> (< ¤аҐб>) - ®«м Ё«Ё Ї®«®¦ЁвҐ«м®Ґ 楫®Ґ,
¬Ґм襥, 祬 ®Ў« бвм Ї ¬пвЁ ¬ЁЄа®Їа®жҐбб®а , Є®в®а®¬ а Ў®в Ґв
muLISP, (MEMORY ¤аҐб) ЇҐаҐ¤ Ґв Ў ©в (в.Ґ. 8-ЎЁв®ў®Ґ § 票Ґ) ў
< ¤аҐб>.
…б«Ё <value> (<§ 票Ґ>) - ®«м Ё«Ё Ї®«®¦ЁвҐ«м®Ґ 楫®Ґ,
¬Ґм襥, 祬 256, (MEMORY ¤аҐб § 票Ґ) § Ї®¬Ё Ґв <§ 票Ґ>
Ў ©в Ї® < ¤аҐбг> Ё ў®§ўа й Ґв ЇҐаў® з «м®Ґ § 票Ґ Ў ©в .
…б«Ё <flag> (<д« Ј>) - Ґ NIL, (MEMORY ¤аҐб § 票Ґ д« Ј)
ЇҐаҐ¤ Ґв б«®ў® (в.Ґ. 16-ЎЁв®ў®Ґ § 票Ґ) ў < ¤аҐб>. …б«Ё
<§ 票Ґ> - ®«м Ё«Ё Ї®«®¦ЁвҐ«м®Ґ 楫®Ґ, ¬Ґм襥, 祬 65536,
(MEMORY ¤аҐб § 票Ґ д« Ј) § Ї®¬Ё Ґв <§ 票Ґ> б«®ў Ї®
< ¤аҐбг> Ё ў®§ўа й Ґв ЇҐаў® з «м®Ґ § 票Ґ б«®ў .
ЏаҐ¤гЇаҐ¦¤ҐЁҐ: MEMORY ¤®«¦ ЁбЇ®«м§®ў вмбп ®зҐм
®бв®а®¦®, в.Є. ®вбгвбвўгҐв § йЁв ®в а §агиҐЁп ЁвҐаЇаҐв в®а
muLISP Ё«Ё агЄ®ў®¤п饩 Ћ‘.
ЏаЁ¬Ґа:
(DEFUN MEMORY (ADDR VALUE FLAG)
((<= 0 ADDR (the address space of the processor))
((NULL FLAG)
((<= 0 VALUE 255)
(replace the byte at ADDR with VALUE)
(return the original byte at ADDR) )
(return the byte at ADDR) )
((<= 0 VALUE 65536)
(replace the word at ADDR with VALUE)
(return the original word at ADDR) )
(return the word at ADDR) ) )
(SETQ *PRINT-BASE* 16 *READ-BASE* 16) ;Hexadecimal I/O
(MEMORY 12) --> 0 ;Byte at 12H
(MEMORY 12 NIL T) --> 0F000 ;Word at 12H
(MEMORY 12 5) --> 0 ;Store 5 at 12H
(MEMORY 12) --> 5 ;Byte at 12H
(MEMORY 12 NIL T) --> 0F005 ;Word at 12H
(MEMORY 12 0) --> 5 ;Restore original byte
(SETQ *PRINT-BASE* 0A *READ-CHAR* 0A) ;Decimal I/O
CSMEMORY [offset,value,flag] Function
DSMEMORY [offset,value,flag] Function
CSMEMORY Ё DSMEMORY ¤®бвгЇл в®«мЄ® в®Ј¤ , Є®Ј¤ muLISP
а Ў®в Ґв ќ‚Њ ᥬҐ©бвў Intel 8086 ¬ЁЄа®Їа®жҐбб®а®ў. ќвЁ
дгЄжЁЁ Ї®¤®Ўл дгЄжЁЁ MEMORY, § ЁбЄ«о票Ґ¬ в®Ј®, зв® §¤Ґбм
ЇҐаўл© аЈг¬Ґв - нв® 16-ЎЁв®ў®Ґ Ї®«Ґ ᥣ¬Ґв , Ґ 20-ЎЁв®ўл©
дЁ§ЁзҐбЄЁ© ¤аҐб. ЏҐаў®Ґ Ї®«Ґ CSMEMORY Ї®¤®Ў® ᥣ¬Ґвг Є®¤ . ‚
DSMEMORY ЇҐаў®Ґ Ї®«Ґ ᮮ⢥вбвўгҐв ᥣ¬Ґвг ¤ ле.
…б«Ё <offset> - ®«м Ё«Ё Ї®«®¦ЁвҐ«м®Ґ 楫®Ґ, ¬ҐмиҐ, 祬
65536, (CSMEMORY offset) Ё (DSMEMORY offset) ЇҐаҐбл« ов Ў ©в ў
<offset>.
…б«Ё <§ 票Ґ> - ®«м Ё«Ё Ї®«®¦ЁвҐ«м®Ґ 楫®Ґ ¬ҐмиҐ, 祬
256, (CSMEMORY offset § 票Ґ) Ё (DSMEMORY offset § 票Ґ)
§ ЇЁблў ов <§ 票Ґ> Ў ©в ў <offset> Ё ў®§ўа й ов
ЇҐаў® з «м®Ґ § 票Ґ Ў ©в .
…б«Ё <д« Ј> - Ґ NIL, (CSMEMORY offset NIL д« Ј) Ё (DSMEMORY
offset NIL д« Ј) ў®§ўа й ов б«®ў® ў <offset>. …б«Ё <§ 票Ґ> -
-®«м Ё«Ё Ї®«®¦ЁвҐ«м®Ґ 楫®Ґ ¬ҐмиҐ, 祬 65536, (CSMEMORY offset
§ 票Ґ д« Ј) Ё (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-н«Ґ¬Ґв ¬Ё Є ¦¤®Ј® бЇЁбЄ , Ё в.¤. ¤® вҐе Ї®а, Ї®Є Є ¦¤л©
бЇЁб®Є Ґ Ўг¤Ґв ЁбзҐаЇ . ЊЂђ‘ ў®§ўа
Соседние файлы в папке Filp