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

Lisp / Filp / LISP12

.TXT
Скачиваний:
20
Добавлен:
15.06.2014
Размер:
19.16 Кб
Скачать
5.15.4. “⢥তҐ­Ёп Ї« ­Ёа®ў ­Ёп дг­ЄжЁ© (ЇаҐ¤ЁЄ вл)

ЏаҐ¤ЁЄ вл Ї« ­Ёа®ў ­Ёп, Є®в®алҐ а бб¬ ваЁў овзбп ў ¤ ­­®¬
Ї®¤а §¤Ґ«Ґ, ®бгйҐбвў«пов ўлЇ®«­Ґ­ЁҐ вҐбв®ўле дг­ЄжЁ© ­ ¤
н«Ґ¬Ґ­в ¬Ё ®¤­®Ј® Ё«Ё ­ҐбЄ®«мЄЁе бЇЁбЄ®ў ¤® вҐе Ї®а, Ї®Є  ­Ґ
ўбваҐвЁвбп ЄаЁвҐаЁ© ®Є®­з ­Ёп Ё«Ё Є®­Ґж Є Є®Ј®-«ЁЎ® Ё§ бЇЁбЄ®ў.
ЉаЁвҐаЁ© ®Є®­з ­Ёп ®б­®ўлў Ґвбп ­  ЁбвЁ­­®¬ §­ зҐ­ЁЁ,
ў®§ўа й Ґ¬®¬ вҐбв®ў®© дг­ЄжЁҐ©. ЏаҐ¤ЁЄ вл Ї« ­Ёа®ў ­Ёп ў®§ўа й ов
ЁбвЁ­­®Ґ §­ зҐ­ЁҐ.


SOME [test,list1,list2,...,lkistN] Function

(some вҐбв бЇЁб®Є1 ... бЇЁб®ЄN) ўлЇ®«­пҐв ¤Ґ©бвўЁп ЇаҐ¤ЁЄ в 
<вҐбв> ­ ¤ car-®ЎмҐЄв ¬Ё <бЇЁбЄ 1>, ..., <бЇЁбЄ N>, § вҐ¬ - ­ ¤
cadr-®ЎмҐЄв ¬Ё Є ¦¤®Ј® бЇЁбЄ  Ё в.¤. ¤® вҐе Ї®а, Ї®Є  вҐбв ­Ґ
ўҐа­Ґв §­ зҐ­ЁҐ, ®в«Ёз­®Ґ ®в NIL, Ё«Ё ­Ґ ўбваҐвЁвбп Є®­Ґж бЇЁбЄ .
…б«Ё вҐбв ў®§ўа й Ґв §­ зҐ­ЁҐ, ®в«Ёз­®Ґ ®в NIL, SOME
ў®§ўа й Ґв нв® §­ зҐ­ЁҐ. …б«Ё Є®­Ґж бЇЁбЄ  ¤®бвЁЈ­гв, SOME
ў®§ўа й Ґв NIL.
ЏаЁ¬Ґа:
(DEFUN SOME (TST LST1 LST2)
(LOOP
((OR (NULL LST1) (NULL LST2)) NIL)
((FUNCALL TST (POP LST1) (POP LST2))) ) )

(SOME 'EQL '(DOG CAT COW) '(COW CAT DOG)) --> T
(SOME 'PLUSP (LIST 0 -3 (+4 -6))) --> NIL





NOTANY [test,list1,list2,...,listN] Function

(NOTANY вҐбв бЇЁб®Є1 ... бЇЁб®ЄN) ўлЇ®«­пҐв ¤Ґ©бвўЁп
ЇаҐ¤ЁЄ в  <вҐбв> ­ ¤ car-н«Ґ¬Ґ­в ¬Ё <бЇЁбЄ 1>, ..., <бЇЁбЄ N>,
§ вҐ¬ - ­ ¤ cadr-н«Ґ¬Ґ­в ¬Ё Є ¦¤®Ј® бЇЁбЄ  Ё в.¤. ¤® вҐе Ї®а.
Ї®Є  вҐбв ­Ґ ўл¤ бв §­ зҐ­ЁҐ, ®в«Ёз­®Ґ ®в NIL, Ё«Ё ­Ґ ўбаҐвЁвбп
Є®­Ґж бЇЁбЄ . …б«Ё вҐбв ўҐа­г« §­ зҐ­ЁҐ, ®в«Ёз­®Ґ ®в NIL, NOTANY
ў®§ўа й Ґв NIL. …б«Ё ўбваҐвЁ«бп Є®­Ґж бЇЁбЄ , NOTANY ў®§ўа й Ґв ’.
ЏаЁ¬Ґа:
(DEFUN NOTANY (TST LST1 LST2)
(NOT (SOME TST LST1 LST2)) )

(NOTANY 'EQL '(DOG CAT COW) '(COW CAT DOG)) --> NIL
(NOTANY 'ODDP (LIST 0 (+3 3) 7/2)) --> T




EVERY [test, list1, list2,...,listN] Function

(EVERY вҐбв бЇЁб®Є1 ... бЇЁб®ЄN) ўлЇ®«­пҐв ¤Ґ©бвўЁп
ЇаҐ¤ЁЄ в  <вҐбв> ­ ¤ car-н«Ґ¬Ґ­в ¬Ё <бЇЁбЄ 1>, ..., <бЇЁбЄ N>,
§ вҐ¬ - ­ ¤ cadr-н«Ґ¬Ґ­в ¬Ё Є ¦¤®Ј® бЇЁбЄ , Ё в.¤. ¤® вҐе Ї®а,
Ї®Є  вҐбв ­Ґ ўл¤ бв NIL Ё«Ё ­Ґ ўбваҐвЁвбп Є®­Ґж бЇЁбЄ . …б«Ё вҐбв
ўл¤ Ґв NIL, EVERY ў®§ўа й Ґв NIL. …б«Ё ўбваҐвЁ«бп Є®­Ґж бЇЁбЄ ,
EVERY ў®§ўа й Ґв ’.
ЏаЁ¬Ґа:
(DEFUN EVERY (TST LST1 LST2)
(LOOP
((OR (NULL LST1) (NULL LST2)) NIL)
((NOT (FUNCALL TST (POP LST1) (POP LST2))) T) )

(EVERY 'EQL '(DOG CAT COW) '(DOG CAT PIG)) --> NIL
(EVERY 'ODDP (LIST 3 5 7 11 13)) --> T





NOTEVERY [test,list1,list2,...,listN] Function

(NOTEVERY вҐбв бЇЁб®Є1 ... бЇЁб®ЄN) ўлЇ®«­пҐв ¤Ґ©бвўЁп
ЇаҐ¤ЁЄ в  <вҐбв> ­ ¤ car-н«Ґ¬Ґ­в ¬Ё <бЇЁбЄ 1>,...,<бЇЁбЄ N>,
§ вҐ¬ - ­ ¤ cadr-н«Ґ¬Ґ­в ¬Ё Є ¦¤®Ј® бЇЁбЄ , Ё в.¤. ¤® вҐе Ї®а,
Ї®Є  вҐбв ­Ґ ўҐа­Ґв NIL Ё«Ё ­Ґ ўбваҐвЁвбп Є®­Ґж бЇЁбЄ . …б«Ё вҐбв
ўҐа­Ґв NIL, NOTEVERY ў®§ўа й Ґв ’. …б«Ё ўбваҐвЁ«бп Є®­Ґж бЇЁбЄ ,
NOTEVERY ў®§ўа й Ґв NIL.
ЏаЁ¬Ґа:
(DEFUN NOTEVERY (TST LST1 LST2)
(NOT (EVERY TST LST1 LST2)) )

(NOTEVERY 'EQL '(DOG CAT COW) '(DOG CAT PIG)) --> T
(NOTEVERY 'STRING< '(BILL JACK JOE) '(BUD JIM SUE)) --> NIL





REDUCE [function,list,initial] Function

(REDUCE дг­ЄжЁп бЇЁб®Є) ЇаҐ®Ўа §гҐв н«Ґ¬Ґ­вл <бЇЁбЄ > Є
Їа®б⮬㠧­ зҐ­Ёо, ЁбЇ®«м§гп <дг­ЄжЁо> - дг­ЄжЁо ¤ўге  аЈг¬Ґ­в®ў.
(REDUCE дг­ЄжЁп бЇЁб®Є ­ з.§­ зҐ­ЁҐ) ЇаҐ®Ўа §гҐв н«Ґ¬Ґ­вл
<бЇЁбЄ >, ЇаЁ­Ё¬ п <­ з.§­ зҐ­ЁҐ> §  ­ з «м­®Ґ §­ зҐ­ЁҐ.
ЏаҐ®Ўа §®ў ­ЁҐ ®бгйҐбвў«пҐвбп б«Ґў  ­ Їа ў®.
ЏаЁ¬Ґа:

(DEFUN REDUCE ARGS
((OR (NULL ARGS) (NULL (CDR ARGS))) NIL)
((NULL (CDDR ARGS))
((ATOM (CADR ARGS))
(FUNCALL (CAR ARGS)) )
(reduce-aux (CAR ARGS) (CDADR ARGS) (CAADR ARGS)))
(reduce-aux (CAR ARGS) (CADR ARGS) (CADDR ARGS)) )

(DEFUN reduce-aux (FUN LST RSLT)
((ATOM LST) RSLT)
(reduce-aux FUNC (CDR LST)(FUNCALL FUNC RSLT (CAR LST)))

(REDUCE 'CONS '(A B C D)) ----> (((A . B) . C) . D)
(REDUCE '* '(2 3 5 7)) ----> 210
(REDUCE '* '(2 3 5 7) -2) ----> -420
(REDUCE '* NIL) ----> 1 ;1 is the identity for *






5.16. Љ®­ва®«м­лҐ Є®­бвагЄжЁЁ

Љ Є Ё ¤агЈЁҐ ᮢ६Ґ­­лҐ бЁб⥬л LISP, muLISP ЁбЇ®«м§гҐв
­Ґпў­го д®а¬г PROGN ¤«п ўлзЁб«Ґ­Ёп д®а¬, б®бв ў«пойЁе ⥫®
дг­ЄжЁЁ. Ћ¤­ Є®, Ё­вҐаЇаҐв в®а muLISP, Єа®¬Ґ в®Ј®, а бЇ®§­ Ґв ў
⥫Ґ дг­ЄжЁЁ ­Ґпў­лҐ COND-л. ЌҐпў­л© COND ¤Ґ« Ґв ®ЇаҐ¤Ґ«Ґ­Ёп
дг­ЄжЁ© Ў®«ҐҐ зЁв ЎҐ«м­л¬Ё, Єа вЄЁ¬Ё Ё нд䥪⨢­л¬Ё. Џ®¤а®Ў­®Ґ
®ЇЁб ­ЁҐ Їа®жҐбб  а бЇ®§­ ў ­Ёп Ё ўлзЁб«Ґ­Ёп COND-®ў ¤ Ґвбп ў
®ЇЁб ­ЁЁ Є®­ва®«м­®© Є®­бвагЄжЁЁ PROGN.
‘ЇҐжЁп«м­лҐ д®а¬л, ®ЇЁб ­­лҐ ў ¤ ­­®¬ а §¤Ґ«Ґ, ®ЎҐбЇҐзЁў ов
Є®­ва®«м §  ўлзЁб«Ґ­ЁҐ¬ д®а¬ ў Їа®жҐбᥠўлЇ®«­Ґ­Ёп Їа®Ја ¬¬.


QUOTE [object] Special form

(QUOTE ®ЎмҐЄв) ў®§ўа й Ґв <®ЎмҐЄв> ЎҐ§ ҐЈ® ўлзЁб«Ґ­Ёп.
<ЋЎмҐЄв> ¬®¦Ґв Ўлвм «ЁЎ® ®ЎмҐЄв®¬ muLISP (в.Ґ. «ЁЎ® бЁ¬ў®«®¬,
«ЁЎ® зЁб«®¬, «ЁЎ® cons-®¬), ­® ®­ ¤®«¦Ґ­ ®Ўп§ вҐ«м­® Ё¬Ґвм ббл«Єг
­  зЁб«®. QUOTE ¬®¦Ґв ЁбЇ®«м§®ў вмбп ¤«п ЇаҐ¤®вўа йҐ­Ёп
ўлзЁб«Ґ­Ёп §­ зҐ­Ёп Є®­бв ­в, Є®в®алҐ ЇҐаҐ¤ овбп ў Є зҐб⢥
 аЈг¬Ґ­в  ўлзЁб«пҐ¬®© дг­ЄжЁЁ.
“Є § вҐ«м ббл«ЄЁ ' ЁбЇ®«м§гҐвбп Є Є б®Єа йҐ­­®Ґ Ё§®Ўа ¦Ґ­ЁҐ
QUOTE (б¬. а §¤Ґ« 5.13): ' - §­ зЁв, ­Ґ ўлзЁб«пвм.
ЏаЁ¬Ґа:
(DEFUN QUOTE (NLAMBDA (OBJ)
OBJ ))

(SETQ FOO 125) --> 125
FOO --> 125
(QUOTE FOO) --> FOO

(CAR (CONS 4 7)) --> 4
(CAR '(CONS 4 7)) --> CONS






PROGN [form1,form2,...,formN] Special form

(PROGN д®а¬ 1 д®а¬ 2 ... д®а¬ N) Ї®б«Ґ¤®ў вҐ«м­® ўлзЁб«пҐв
д®а¬л, ­ зЁ­ п б <д®а¬л1>, Ё ўл¤ Ґв §­ зҐ­ЁҐ Ї®б«Ґ¤­Ґ©
ўлзЁб«Ґ­­®© д®а¬л. Љ Є Ўг¤Ґв ўлзЁб«пвмбп д®а¬ , § ўЁбЁв ®в
бвагЄвгал бЇЁбЄ  д®а¬, в.Ґ.:
- Ґб«Ё <д®а¬ > -  в®¬, Ё«Ё car <д®а¬л> -  в®¬ Ё«Ё ⥫®
LAMBDA, (EVAL д®а¬ ) Ґбвм §­ зҐ­ЁҐ <д®а¬л>;
- Ґб«Ё caar <д®а¬л> -  в®¬ Ё«Ё ⥫® LAMBDA, в® car <д®а¬л> -
ЇаҐ¤ЁЄ в,   cdr <д®а¬л> - ⥫® ­Ґпў­®Ј® COND. …б«Ё §­ зҐ­ЁҐ
ЇаҐ¤ЁЄ в  (в.Ґ. (EVAL (CAR д®а¬ )) ) Ґбвм NIL, в® §­ зҐ­ЁҐ
<д®а¬л> - в Є¦Ґ NIL. Ћ¤­ Є®, Ґб«Ё §­ зҐ­ЁҐ ЇаҐ¤ЁЄ в  - ­Ґ NIL,
ўбҐ ®бв «м­лҐ д®а¬л Ё§ PROGN г¤ «повбп,   ў¬Ґбв® нв®Ј®
Ї®б«Ґ¤®ў вҐ«м­® ўлзЁб«повбп д®а¬л, бв®пйЁҐ ў ⥫Ґ ­Ґпў­®Ј® COND.
…б«Ё ⥫® COND Їгб⮥, PROGN ў®§ўа й Ґв §­ зҐ­ЁҐ ЇаҐ¤ЁЄ в ;
- Ґб«Ё <д®а¬ > ­Ґ пў«пҐвбп ­ЁзҐ¬ Ё§ ЇҐаҐзЁб«Ґ­­®Ј® ўлиҐ,
(APPLY 'PROGN д®а¬ ) ўлзЁб«пҐвбп Ё ўл¤ Ґвбп ў Є зҐб⢥ <д®а¬л>
ЇҐаҐ¤ Їа®¤®«¦Ґ­ЁҐ¬ ўлзЁб«Ґ­Ёп ®бв ўиЁебп д®а¬. в Є ¬®¦­®
®бгйҐбвў«пвм гб«®ў­®Ґ а §ўҐвў«Ґ­ЁҐ Ё ЇҐаҐЄ®¬ЎЁ­ жЁо Їа®Ја ¬¬ ў
¤ «м­Ґ©иҐ¬.
ЏаЁ¬Ґа:

(DEFUN PROGN (NLAMBDA FORM-LST
(eval-progn FORM-LST) ))

(DEFUN eval-progn (LST RSLT)
((ATOM LST) RSLT)
((OR (ATOM (CAR LST)) (ATOM (CAAR LST))
(EQ (CAAAR LST) 'LAMBDA))
(eval-proqn (CDR LST) (EVAL (CAR LST))) )
((OR (ATOM (CAAAR LST)) (EQ (CAAAAR LST) 'LAMBDA))
(SETQ RSLT (EVAL (CAAR LST)))
((NOT RSLT)
(eval-proqn (CDR LST) )
(eval-proqn (CDAR LST) RSLT) )
(eval-proqn (CDR LST) (eval-proqn (CAR LST))) )

(PROGN (SETQ NUM1 (+ 2 5))
(SETQ NUM2 (* 3 4))
((< NUM1 NUM2)
((MINUSP NUM1)
(* 3 NUM2) )
(+ NUM1 NUM2) )
(- NUM1 NUM2) ) --> 19




LOOP [form1,form2,...,formN] Special form

(LOOP д®а¬ 1 ... д®а¬ N) Ї®ўв®а­® ўлзЁб«пҐв д®а¬л ў
Ї®б«Ґ¤®ў вҐ«м­®¬ Ї®ап¤ЄҐ ¤® вҐе Ї®а, Ї®Є  ­Ґ ўбваҐвЁвбп ­Ґпў­л©
COND б ЇаҐ¤ЁЄ в®¬, ­Ґ а ў­л¬ NIL. ‡ вҐ¬ LOOP ўлзЁб«пҐв ⥫®
­Ґпў­®Ј® COND Ё ў®§ўа й Ґв १г«мв в.
ЊҐе ­Ё§¬ ўлзЁб«Ґ­Ёп ⥫  дг­ЄжЁЁ б Ї®¬®ймо ­Ґпў­®© PROGN
пў«пҐвбп ¤®ў®«м­® ¬«й­л¬, ­® ®­ ­Ґ Є б Ґвбп бвагЄвга Є®­ва®«п
­ҐаҐЄгабЁў­ле Їа®Ја ¬¬. ’ Є п ў®§¬®¦­®бвм ®ЎҐбЇҐзЁў Ґвбп
Є®­ва®«м­®© Є®­бвагЄжЁҐ© LOOP. LOOP Ї®б«Ґ¤®ў вҐ«м­® ўлзЁб«пҐв
бў®Ё д®а¬л ⥬ ¦Ґ ¬Ґв®¤®¬, Є Є д®а¬л ўлзЁб«повбп ў PROGN. Ћ¤­ Є®
Ґб«Ё ўбҐ д®а¬л ў LOOP ўлзЁб«Ґ­л, ­® ­Ґ 㤮ў«Ґвў®апов Є ЄЁ¬-«ЁЎ®
гб«®ўЁп¬, ўлзЁб«Ґ­ЁҐ Ї®ўв®апҐвбп, ­ зЁ­ п б ЇҐаў®© д®а¬л.
€бе®«­лҐ д ©«л muLISP ᮤҐа¦ в зЁб«®ўлҐ ЇаЁ¬Ґал дг­ЄжЁЁ
LOOP. •®вп ¤ ­­®Ґ д®а¬ «м­®Ґ ®ЇаҐ¤Ґ«Ґ­ЁҐ пў«пҐвбп ४габЁў­л¬, ­ 
б ¬®¬ ¤Ґ«Ґ LOOP - нв® ­ҐаҐЄгабЁў­®Ґ ¤Ґ©бвўЁҐ ­  ¬ иЁ­­®¬ п§лЄҐ.
ЏаЁ¬Ґа:
(DEFUN LOOP (NLAMBDA FORM-LST
(eval-loop FORM-LST) ))

(DEFUN eval-loop (LST RSLT)
((ATOM LST)
(eval-loop FORM-LST) )
((OR (ATOM (CAR LST)) (ATOM (CAAR LST))
(EQ (CAAAR LST) 'LAMBDA))
(eval-loop (CDR LST) (EVAL (CAR LST))) )
((OR (ATOM (CAAAR LST)) (EQ (CAAAAR LST) 'LAMBDA))
(SETQ RSLT (EVAL (CAAR LST)))
((NOT RSLT)
(eval-loop (CDR LST) )
(eval-progn (CDAR LST) RSLT) )
(eval-loop (CDR LST) (eval-proqn (CAR LST))) )

(SETQ NUM 5)
(LOOP ((ZEROP NUM))
(PRIN1 NUM)
(SPACES 2)
(PRINT (*NUM NUM))
(DECQ NUM) )
5 25
4 16
3 9
2 4
1 1
T



PROG1 [form1,form2,...,formN] Special form

(PROG1 д®а¬ 1 ... д®а¬ N) ўлзЁб«пҐв <д®а¬г1>, § вҐ¬ -
®бв ўиЁҐбп д®а¬л, ЁбЇ®«м§гп ­Ґпў­го PROGN, Ё ў®§ўа й Ґв १г«мв в
ўлзЁб«Ґ­Ёп <д®а¬л1>. PROG1 з бв® ЁбЇ®«м§гов ¤«п в®Ј®, зв®Ўл ­Ґ
ўў®¤Ёвм ўаҐ¬Ґ­­лҐ ЇҐаҐ¬Ґ­­лҐ ¤«п еа ­Ґ­Ёп १г«мв в®ў ў Їа®жҐббҐ
ўлзЁб«Ґ­Ёп ¤агЈЁе ўла ¦Ґ­Ё©.
ЏаЁ¬Ґа:
(DEFUN PROG1 (NLAMBDA FORM-LST
((NULL FORM-LST) NIL)
(eval-prog1 (EVAL (CAR FORM-LST)) (CDR FORM0LST)) ))

(DEFUN eval-prog1 (RSLT LST)
(eval-proqn LST)
RSLT )

(SETQ FOO '(A B C D)) --> (A B C D)
(PROG1 (CAR FOO) (SETQ FOO (CDR FOO))) --> A
FOO --> (B C D)




IDENTITY [object] Function

(IDENTITY ®ЎмҐЄв) ў®§ўа й Ґв <®ЎмҐЄв> ЎҐ§ Є ЄЁе-«ЁЎ® ¤агЈЁе
¤Ґ©бвўЁ©. ЏаҐ¤ЁЄ в ­Ґпў­®© COND ¤®«¦Ґв Ўлвм ЇаЁ¬Ґ­Ґ­ЁҐ¬ дг­ЄжЁЁ,
  ­Ґ в®«мЄ® ЇҐаҐ¬Ґ­­®©. ‘«Ґ¤®ў вҐ«м­®, IDENTITY ¬®¦Ґв ЇаЁ¬Ґ­пвмбп
¤«п ЁбЇ®«м§®ў ­Ёп ЇҐаҐ¬Ґ­­ле ў Є зҐб⢥ ЇаҐ¤ЁЄ в®ў.
ЏаЁ¬Ґа:
(DEFUN IDENTITY (OBJ)
OBJ )

(IDENTITY NIL) --> NIL
(IDENTITY 'DOG) --> DOG
(IDENTITY '(A B C)) --> (A B C)

(DEFUN TEST-VAR (VAR)
((IDENTITY VAR) 'VAR-IS-TRUE)
'VAR-IS-FALSE )
(TEST-VAR NIL) --> VAR-IS-FALSE




IF [predicate,thenform,elseform] Special form

…б«Ё §­ зҐ­ЁҐ <ЇаҐ¤ЁЄ в > Ґбвм ­Ґ NIL, (IF ЇаҐ¤ЁЄ в
then-д®а¬  else-д®а¬ ) ўлзЁб«пҐвбп, Ё ўл¤ Ґвбп <then-д®а¬ >. ‚
Їа®вЁў­®¬ б«гз Ґ ўлзЁб«пҐвбп IF Ё ўл¤ Ґвбп <else-д®а¬ > Ё«Ё NIL,
Ґб«Ё <else-д®а¬ > ®вбгвбвўгҐв.
‘ЇҐжЁ «м­ п д®а¬  IF ў LISP  ­ «®ЈЁз­  Є®­бвагЄжЁЁ
"if-then-else" ў ¤агЈЁе п§лЄ е.
ЏаЁ¬Ґа:
(DEFUN IF (NLAMBDA (PREDICATE THEN ELSE)
((EVAL PREDICATE)
(EVAL THEN) )
(EVAL ELSE) ))

(IF (EQ (* 2 3) 6) 'TRUE 'FALSE) --> TRUE
(IF (EQ (+ 2 3) 6) 'TRUE 'FALSE) --> FALSE




COND [cond1,cond2,...,condN] Special form

(COND cond1 ... condN) ўлзЁб«пҐв car Є ¦¤®© cond-д®а¬л (в.Ґ.
ЇаҐ¤ЁЄ в ) ¤® вҐе Ї®а, Ї®Є  ­Ґ ўбваҐвЁвбп Є Є®Ґ-«ЁЎ® §­ зҐ­ЁҐ,
®в«Ёз­®Ґ ®в NIL, «ЁЎ® Ї®Є  ўбҐ ЇаҐ¤ЁЄ вл ­Ґ Ўг¤гв ўлзЁб«Ґ­л. ‚
ЇҐаў®¬ б«гз Ґ COND ўлзЁб«пҐв cdr-н«Ґ¬Ґ­в cons-д®а¬л б ЇаҐ¤ЁЄ в®¬,
®в«Ёз­л¬ ®в NIL, Є Є ⥫® дг­ЄжЁЁ, ЁбЇ®«м§гп ­Ґпў­го PROGN. …б«Ё
crd-н«Ґ¬Ґ­в cond-д®а¬л, ­Ґ а ў­®© NIL, Їгбв, в® COND ў®§ўа й Ґв
§­ зҐ­ЁҐ ЇаҐ¤ЁЄ в . …б«Ё ўбҐ ЇаҐ¤ЁЄ вл Ўл«Ё ўлзЁб«Ґ­л Ё ўбҐ
ў®§ўа вЁ«Ё NIL, в® COND ўл¤ Ґв NIL.
‚ muLISP ­Ґпў­л© COND §­ зЁвҐ«м­® 㬥­ми Ґв ­Ґ®е®¤Ё¬®бвм
пў­®Ј® ЁбЇ®«м§®ў ­Ёп дг­ЄжЁЁ COND. Ћ¤­ Є®, Є Є Ї®Є § ­® ­ 
ЇаЁ¬ҐаҐ, COND 㤮ЎҐ­ в®Ј¤ , Є®Ј¤  ў ўл§®ўҐ ўбв஥­­ле дг­ЄжЁ©
д®а¬ЁагҐвбп г⢥তҐ­ЁҐ гб«®ўЁп.
ЏаЁ¬Ґа:
(DEFUN COND (NLAMBDA COND-LST
(eval-cond COND-LST) ))

(DEFUN eval-cond (LST RSLT)
((ATOM LST) NIL)
(SETQ RLST (EVAL (CAAR LST)))
((NOT RLST)
(eval-cond (CDR LST)) )
(eval-progn (CDAR LST) RSLT) )


(SETQ NUM -3) --> -3
(SETQ SIGN (COND ((PLUSP NUM) 'POSITIVE)
((MINUSP NUM) 'NEGATIVE)
((ZEROP NUM) 'ZERO)
('NONNUMBER) ) ) --> NEGATIVE



COMMENT [comments] Special form

(COMMENT Є®¬¬Ґ­в аЁЁ) ЁЈ­®аЁагҐв бў®Ё  аЈг¬Ґ­вл Ё ў®§ўа й Ґв
NIL.
”г­ЄжЁп COMMENT ®ЇаҐ¤Ґ«пҐв бЇ®б®Ў ўЄ«о祭Ёп Є®¬¬Ґ­в аЁҐў
­ҐЇ®б।б⢥­­® ў ®ЇаҐ¤Ґ«Ґ­ЁҐ дг­ЄжЁЁ. ’ ЄЁҐ Є®¬¬Ґ­в аЁЁ
ЁбЇ®«м§гов ®Ў« бвЁ Ї ¬пвЁ ў RAM-Ї ¬пвЁ.
‚ Їа®вЁў®Ї®«®¦­®бвм н⮬г, Є®¬¬Ґ­в аЁЁ, ®Ја ­ЁзҐ­­лҐ
¬ Єа®-бЁ¬ў®« ¬Ё Є®¬¬Ґ­в аЁҐў, ЁЈ­®аЁаговбп ЇаЁ бзЁвлў ­ЁЁ ў
muLISP (c¬. а §¤Ґ« 5.13). •®вп в ЄЁҐ Є®¬¬Ґ­в аЁЁ вॡгов ®Ў« б⥩
Ї ¬пвЁ ­  ¤ЁбЄҐ, ®­Ё ­Ґ ЁбЇ®«м§гов ®Ў« бвЁ Ї ¬пвЁ ў RAM-Ї ¬пвЁ.
ЏаЁ¬Ґа:
(DEFUN COMMENT (NLAMBDA ()
NIL ))

(DEFUN FOO (X)
(COMMENT The definition of FOO contains a comment that
refers to itself)
(CONS X X) )



CATCH [label,form1,...,formN] Special form

(CATCH ¬ҐвЄ  д®а¬ 1 ... д®а¬ N) ў®§ўа й Ґв १г«мв в
ўлзЁб«Ґ­Ёп д®а¬ б ЁбЇ®«м§®ў ­ЁҐ¬ ­Ґпў­®Ј® PROGN, Ґб«Ё ў Їа®жҐббҐ
ўлзЁб«Ґ­Ёп ­Ґ Їа®Ё§®©¤Ґв ЇҐаҐе®¤ ­  <¬ҐвЄг>. …б«Ё в Є®© ЇҐаҐе®¤
Їа®Ё§®иҐ«, CATCH ў®§ўа й Ґв §­ зҐ­ЁҐ, гбв ­®ў«Ґ­­®Ґ ЇаЁ ЇҐаҐе®¤Ґ.
ЂаЈг¬Ґ­в <¬ҐвЄ > ўлзЁб«пҐвбп ¤® ўлзЁб«Ґ­Ёп д®а¬. …б«Ё
<¬ҐвЄ > Ґбвм NIL, в® ўбҐ ЇҐаҐе®¤л, Їа®Ёб室пйЁҐ ў Їа®жҐббҐ
ўлзЁб«Ґ­Ёп д®а¬, г« ў«Ёў овбп CATCH.
ЏаЁ¬Ґа:
(DEFUN ‘ATCH (NLAMBDA LST
((NULL LST) NIL)
(eval-catch (EVAL (CAR LST)) (CDR LST)) ))

(DEFUN eval-catch (LABEL LST RSLT)
(SETQ RSLT (eval-progn LST))
((if the internal throw flag is inactive) RSLT)
((OR (NULL LABEL) (EQ LABEL (throw's label)))
(deactive internal throw flag)
THROW )
RSLT )


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