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