
Добавил:
Kaz
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
ASSOC [key,alist,test] Function
ASSOC-IF [test,alist] Function
Ђбб®жЁ вЁўл© бЇЁб®Є (alist) - нв® бЇЁб®Є Ї а ( в.Ґ.
cons-®ў), ®Ўлз® ЁбЇ®«м§гҐ¬ле ў muLISP ¤«п бўпнЁ Є«оз Ё ®ЎмҐЄв .
ASSOC Ё ASSOC-IF пў«повбп дгЄжЁп¬Ё ®вЎ®а , Ї®§ў®«пойЁ¬Ё Ї®«гзЁвм
¤®бвгЇ Є ®ЎмҐЄвг, бўп§ ®¬г б Є«о箬, 㤮ў«Ґвў®апо饬г вҐбвг.
(ASSOC Є«оз /бЇЁб®Є вҐбв) ўлЇ®«пҐв «ЁҐ©л© Ї®ЁбЄ ў
< /бЇЁбЄҐ> Ї ал, ¤«п Є®в®а®© ЇаЁ ба ўҐЁЁ ҐҐ car-н«Ґ¬Ґв б
<Є«о祬> Ї® <вҐбвг> ЇаЁн Є Ґ а ўҐ NIL. …б«Ё <вҐбв>- аЈг¬Ґв
а ўҐ NIL Ё«Ё Ґ § ¤ , ASSOC ЁбЇ®«м§гҐв EQL-вҐбв.
(ASSOC-IF вҐбв /бЇЁб®Є) ЁйҐв ў < /бЇЁбЄҐ> Ї аг, ¤«п Є®в®а®©
ЇаЁ§ Є Їа®ўҐаЄЁ ҐҐ car-н«Ґ¬Ґв Ї® <вҐбвг> Ґбвм Ґ NIL.
„«п ®ЎҐЁе дгЄжЁ©, Ґб«Ё Ї а , 㤮ў«Ґвў®апой п вҐбвг,
©¤Ґ , нв Ї а ўл¤ Ґвбп; Ё зҐ ў®§ўа й Ґвбп NIL.
ЏаЁ¬Ґа:
(DEFUN ASSOC (KEY ALIST TEST)
((ATOM ALIST) NIL)
((ATOM (CAR ALIST))
(ASSOC KEY (CDR ALIST) TEST) )
( ((NULL TEST)
(SETQ TEST 'EQL) ) )
((FUNCALL TEST KEY (CAAR ALIST))
(CAR ALIST) )
(ASSOC KEY (CDR ALIST) TEST) )
(SETQ CAPITALS
'((USA . WASHINGTON) (FRANCE . PARIS) (JAPAN . TOKYO)))
(ASSOC 'FRANCE CAPITALS) --> (FRANCE . PARIS)
(ASSOC 'AUSTRALIA CAPITALS) --> NIL
RASSOC [key,alist,test] Function
RASSOC-IF [test,alist] Function
(RASSOC Є«оз /бЇЁб®Є вҐбв) ўлЇ®«пҐв «ЁҐ©л© Ї®ЁбЄ ў
< /бЇЁбЄҐ> Ї ал, ¤«п Є®в®а®© ЇаЁ ба ўҐЁЁ ҐҐ cdr-н«Ґ¬Ґв б
<Є«о祬> Ї® <вҐбвг> ЇаЁ§ Є Ґ а ўҐ NIL. …б«Ё <вҐбв>- аЈг¬Ґв
Ґбвм NIL Ё«Ё Ґ § ¤ , RASSOC ЁбЇ®«м§гҐв EQL-вҐбв.
(RASSOC-IF вҐбв /бЇЁб®Є) ўлЇ®«пҐв ў /бЇЁбЄҐ Ї®ЁбЄ Ї ал,
¤«п Є®в®а®© ЇаЁ§ Є Їа®ўҐаЄЁ ҐҐ cdr-н«Ґ¬Ґв Ї® <вҐбвг> Ґ а ўҐ
NIL. „«п ®ЎҐЁе дгЄжЁ©, Ґб«Ё Ї а , 㤮ў«Ґвў®апой п вҐбвг,
©¤Ґ , нв Ї а ўл¤ Ґвбп; ў Їа®вЁў®¬ б«гз Ґ ўл¤ Ґвбп NIL.
RASSOC - нв® б®Єа 饨Ґ ®в Reverse Ё ASSOCiate.
ЏаЁ¬Ґа:
(DEFUN RASSOC (KEY ALIST TEST)
((ATOM ALIST) NIL)
((ATOM (CAR ALIST))
(RASSOC KEY (CDR ALIST) TEST) )
( ((NULL TEST)
(SETQ TEST 'EQL) ) )
((FUNCALL TEST KEY (CDAR ALIST))
(CAR ALIST) )
(RASSOC KEY (CDR ALIST) YEST) )
(RASSOC 'PARIS CAPITALS) --> (FRANCE . PARIS)
(RASSOC 'CANBERRA CAPITALS) --> NIL
5.2. ”гЄжЁЁ Є®бвагЄв®а
muLISP-Їа®Ја ¬¬л ¬®Јг⠢⮬ вЁзҐбЄЁ ЈҐҐаЁа®ў вм ®ўлҐ
бвагЄвгал ¤ ле, ЁбЇ®«м§гп дгЄжЁЁ Є®бвагЄв®а . ќвЁ дгЄжЁЁ
¬®Јгв б®§¤ ў вм ЎЁ алҐ ¤ҐаҐўмп Ё«Ё бўп§ лҐ бЇЁбЄЁ, Є®в®алҐ
¬®¤Ґ«Ёагов бвагЄвгал ¤ ле Їа ЄвЁзҐбЄЁ ¤«п «оЎ®© § ¤ зЁ.
CONS [object1, object2] Function
(CONS ®ЎмҐЄв1 ®ЎмҐЄв2) ў®§ўа й Ґв cons, г Є®в®а®Ј®
car-н«Ґ¬Ґв гЄ §лў Ґв <®ЎмҐЄв1>, cdr-н«Ґ¬Ґв - <®ЎмҐЄв2>.
…б«Ё § 票Ґ *FREE-LIST* Ґбвм cons, CONS ¬®¤ЁдЁжЁагҐв Ё
ў®§ўа й Ґв нв®в cons Ё ЇаЁў®¤Ёв *FREE-LIST* Є cdr *FREE-LIST*.
Љ®а४в п ЁвҐаЇаҐв жЁп (‘ONS ®ЎмҐЄв1 ®ЎмҐЄв2) § ўЁбЁв ®в
в®Ј®, Є Є а бб¬ ваЁў Ґвбп <®ЎмҐЄв2>. …б«Ё <®ЎмҐЄв2> - бЇЁб®Є,
CONS б®§¤ Ґв бЇЁб®Є, ЇҐаўл¬ н«Ґ¬Ґв®¬ Є®в®а®Ј® пў«пҐвбп
<®ЎмҐЄв1>, ®бв вЄ®¬ - <®ЎмҐЄв2>. …б«Ё <®ЎмҐЄв2> - ⮬ Ё«Ё
ЎЁ ஥ ¤ҐаҐў®, CONS б®§¤ Ґв ¤ҐаҐў®, г Є®в®а®Ј® «Ґў п ўҐвўм, Ё«Ё
car-ўҐвўм Ґбвм <®ЎмҐЄв1>, Їа ў п ўҐвўм, Ё«Ё cdr-ўҐвўм -
<®ЎмҐЄв2>.
ЏаЁ¬Ґа:
(DEFUN CONS (OBJ1 OBJ2)
((ATOM *FREE-LIST*)
(return a new cons pointing to OBJ1 and OBJ2) )
(RPLACA *FREE-LIST* OBJ1)
(RPLACD (PROG1 *FREE-LIST* (POP *FREE-LIST*)) OBJ2) )
(CONS 'A '(B C D)) --> (A B C D)
(CONS 'A 'B) --> (A . B)
ACONS [key,object,alist] Function
(ACONS Є«оз ®ЎмҐЄв /бЇЁб®Є) б®§¤ Ґв Ї аг (Є«оз . ®ЎмҐЄв),
а бЇ®« Ј Ґв ҐҐ ў з «Ґ < /бЇЁбЄ > Ё ў®§ўа й Ґв १г«мвЁагойЁ©
бб®жЁ вЁўл© бЇЁб®Є. ACON гЇа®й Ґв Їа®жҐбб б®§¤ Ёп
бб®жЁ вЁўле бЇЁбЄ®ў.
ЏаЁ¬Ґа:
(DEFUN ACONS (KEY OBJ ALIST)
(CONS (CONS KEY OBJ) ALIST) )
(ALIST 'EYES 'BLUE '((WEIGTH . 170) (HEIGTH . 72))) -->
((EYES . BLUE) (WEIGTH . 170) (HEIGTH . 72))
LIST [object1,object2,...,objectn] Function
(LIST ®ЎмҐЄв1 ... ®ЎмҐЄвn) б®§¤ Ґв Ё ўл¤ Ґв бЇЁб®Є,
б®бв® йЁ© Ё§ н«Ґ¬Ґв®ў б <®ЎмҐЄв 1> Ї® <®ЎмҐЄвn>. …б«Ё дгЄжЁп
ўл§ў ЎҐ§ аЈг¬Ґв®ў, в® LIST ў®§ўа й Ґв ЇаЁ§ Є NIL. LIST
¬®¦Ґв а Ў®в вм б «оЎл¬ Є®«ЁзҐбвў®¬ аЈг¬Ґв®ў.
ЏаЁ¬Ґа:
(DEFUN LIST LST
((NULL LST) NIL)
(CONS (CAR LST) (APPLY 'LIST (CDR LST))) )
(LIST 'A 'B 'C 'D) ---> (A B C D)
(LIST 'A '(B C) 'D) ---> (A (B C) D)
(LIST) ---> NIL
LIST* [object1,object2,...,objectn] Function
(LIST* ®ЎмҐЄв1 ... ®ЎмҐЄвn) бўп§лў Ґв ў Ї аг ®ЎмҐЄвл
<®ЎмҐЄв1>,...,<®ЎмҐЄвn-1> Ё <®ЎмҐЄвn> Ё ўл¤ Ґв १г«мвЁагойЁ©
®ЎмҐЄв. …б«Ё дгЄжЁп ўл§лў Ґвбп б Ґ¤ЁбвўҐл¬ аЈг¬Ґв®¬, LIST*
ў®§ўа й Ґв нв®в аЈг¬Ґв.
ЏаЁ¬Ґа:
(DEFUN LIST* LST
((NULL LST) NIL)
((NULL (CDR LST))
(CAR LST) )
(CONS (CAR LST) (APPLY 'LIST* (CDR LST))) )
(LIST* 'A 'B 'C 'D) --> (A B C . D)
(LIST* 'A 'B '(C D)) --> (A B C D)
(LIST* 'DOG) --> DOG
APPEND [list1,list2,...,listn] Function
(APPEND бЇЁб®Є1 бЇЁб®Є2 ... бЇЁб®Єn) б®§¤ Ґв Ё ў®§ўа й Ґв
бЇЁб®Є, б®бв®пйЁ© Ё§ н«Ґ¬Ґв®ў бЇЁбЄ®ў, зЁ п б® <бЇЁбЄ 1> Ё Ї®
<бЇЁб®Єn>. APPEND Є®ЇЁагҐв cons-л ўлб襣® га®ўп Є ¦¤®Ј® Ё§
бў®Ёе аЈг¬Ґв®ў, Єа®¬Ґ Ї®б«Ґ¤ҐЈ®. …б«Ё дгЄжЁп ўл§лў Ґвбп б
Ґ¤ЁбвўҐл¬ аЈг¬Ґв®¬, APPEND Їа®бв® ў®§ўа й Ґв нв®в аЈг¬Ґв
ЎҐ§ ҐЈ® Є®ЇЁа®ў Ёп. ‘«Ґ¤®ў ⥫м®, ¤«п Є®ЇЁа®ў Ёп бЇЁбЄ «гзиҐ
ЁбЇ®«м§®ў вм COPY-LIST, 祬 APPEND.
Ћв¬ҐвЁ¬, зв® Ґб«Ё APPEND Ё NCONC, ® Є®в®а®© Ўг¤Ґв бЄ § ®
¤ «ҐҐ, Ё¬Ґов ®¤Ё Є®ўлҐ аЈг¬Ґвл, ®Ё ў®§ўа й ов, Є Є Їа ўЁ«®,
®¤Ё Є®ўлҐ бЇЁбЄЁ. Ћ¤ Є®, APPEND ЁбЇ®«м§гҐв cons-л ¤«п
Є®ЇЁа®ў Ёп ўбҐе, Єа®¬Ґ Ї®б«Ґ¤ҐЈ®, аЈг¬Ґв®ў, в®Ј¤ Є Є NCONC
д ЄвЁзҐбЄЁ ¬®¤ЁдЁжЁагҐв ўбҐ аЈг¬Ґвл, Єа®¬Ґ Ї®б«Ґ¤ҐЈ®.
ЏаЁ¬Ґа:
(DEFUN APPEND (LST1 LST2)
((ATOM LST1) LST2)
(CONS (CAR LST1) (APPEND (CDR LST1) LST2)) )
(SETQ FOO '(D E F)) --> (D E F)
(APPEND '(A B C) FOO '(G H I)) --> (A B C D E F G H I)
FOO --> (D E F)
(APPRND '(A B C D) 'E 'F 'G) --> (A B C D . G)
COPY-LIST [list] Function
(COPY-LIST бЇЁб®Є) Є®ЇЁагҐв cons-л ўҐа奣® га®ўп <бЇЁбЄ >
Ё ў®§ўа й Ґв бЇЁб®Є, нЄўЁў «Ґвл© (в.Ґ. EQUAL) <бЇЁбЄг>.
ЏаЁ¬Ґа:
(DEFUN COPY-LIST (LST)
((ATOM LST) LST)
(CONS (CAR LST) (COPY-LIST (CDR LST))) )
(COPY-LIST '(A B (C . D) E)) --> (A B (C . D) E)
(COPY-LIST '(A B C . D)) --> (A B C . D)
COPY-TREE [object]
(COPY-TREE ®ЎмҐЄв) Є®ЇЁагҐв ўбҐ cons-л <®ЎмҐЄв > Ё
ў®§ўа й Ґв ®ЎмҐЄв, нЄўЁў «Ґвл© <®ЎмҐЄвг>.
ЏаЁ¬Ґа:
(DEFUN COPY-TREE (OBJ)
((ATOM OBJ) OBJ)
(CONS (COPY-TREE (CAR OBJ)) (COPY-TREE (CDR OBJ))) )
(COPY-TREE '(A B (C . D) E)) --> (A B (C . D) E)
(COPY-TREE '(A B C . D)) --> (A B C . D)
FIRSTN [n,list] Function
…б«Ё <n> - Ї®«®¦ЁвҐ«м®Ґ 楫®Ґ, (FIRST n бЇЁб®Є) Є®ЇЁагҐв Ё
ў®§ўа й Ґв ЇҐаўлҐ n н«Ґ¬Ґв®ў бЇЁбЄ . FIRSTN ў®§ўа й Ґв NIL, Ґб«Ё
n -ҐЇ®«®¦ЁвҐ«м®Ґ 楫®Ґ. …б«Ё <бЇЁб®Є> Ё¬ҐҐв n Ё«Ё Ў®«ҐҐ
н«Ґ¬Ґв®ў, FIRSTN Є®ЇЁагҐв Ё ў®§ўа й Ґв н«Ґ¬Ґвл <бЇЁбЄ >.
ЏаЁ¬Ґа:
(DEFUN FIRSTN (N LST)
((AND (INTEGERP N) (PLUSP N))
((ATOM LST) NIL)
(CONS (CAR LST) (FIRSTN (SUB1 N) (CDR LST))) ) )
(FIRSTN 0 '(SUE JOE ANN BOB)) --> NIL
(FIRSTN 2 '(SUE JOE ANN BOB)) --> (SUE JOE)
(FIRSTN 4 '(SUE JOE ANN BOB)) --> (SUE JOE ANN BOB)
(FIRSTN 5 '(SUE JOE ANN BOB)) --> (SUE JOE ANN BOB)
(FIRSTN 2 '(A B . C) --> (A B)
(FIRSTN 3 '(A B . C) --> (A B)
BUTLAST [list,n] Function
…б«Ё <n> -®«м Ё«Ё Ї®«®¦ЁвҐ«м®Ґ 楫®Ґ, (BUTLAST бЇЁб®Є n)
Є®ЇЁагҐв Ё ў®§ўа й Ґв ўбҐ, Єа®¬Ґ n Ї®б«Ґ¤Ёе н«Ґ¬Ґв®ў <бЇЁбЄ >.
…б«Ё n Їа®Їг饮 Ё«Ё «ЁЎ® а ў® г«о, «ЁЎ® Ґ пў«пҐвбп
Ї®«®¦ЁвҐ«мл¬ жҐ«л¬, BUTLAST Є®ЇЁагҐв Ё ў®§ўа й Ґв ўбҐ, Єа®¬Ґ
Ї®б«Ґ¤ҐЈ®, н«Ґ¬Ґвл <бЇЁбЄ >.
ЏаЁ¬Ґа:
(DEFUN BUTLAST (LST N)
((AND (INTEGERP N) (>=N 0))
(FIRST (-(LENGTH LST) N) LST) )
(BUTLAST LST 1) )
(BUTLAST '(A B C D)) --> (A B C)
(BUTLAST '(A B C D) 2) --> (A B)
REMOVE [item,list,test] Function
REMOVE-IF [test,list] Function
(REMOVE н«Ґ¬Ґ бЇЁб®Є вҐбв) ў®§ўа й Ґв Є®ЇЁо <бЇЁбЄ > б®
ўбҐ¬Ё н«Ґ¬Ґв ¬Ё, Єа®¬Ґ вҐе, Є®в®алҐ ЇаЁ Їа®ўҐаЄҐ Ї® <вҐбвг>
Ё¬Ґов ЇаЁ§ Є - Ґ NIL Ё г¤ «повбп (в.Ґ. (test item element) Ґ
а ўҐ NIL).
…б«Ё <вҐбв>- аЈг¬Ґв Ґбвм NIL Ё«Ё Ґ § ¤ , REMOVE
ЁбЇ®«м§гҐв EQL-вҐбв. (REMOVE-IF вҐбв бЇЁб®Є) ў®§ўа й Ґв Є®ЇЁо
<бЇЁбЄ > б® ўбҐ¬Ё н«Ґ¬Ґв ¬Ё, Єа®¬Ґ вҐе, Є®в®алҐ Ё¬Ґов
ЇаЁ Їа®ўҐаЄҐ Ї® вҐбвг ЇаЁ§ Є Ґ NIL (test element - Ґ NIL) Ё
г¤ «повбп.
ЏаЁ¬Ґа:
(DTFUN REMOVE (ITEM LST TEST)
((ATOM LST) LST)
( ((NULL TEST)
(SETQ TEST 'EQL) ) )
(LET ( (COPY (REMOVE ITEM (CDR LST) TEST)) )
((FUNCALL TEST ITEM (CAR LST)) COPY)
((EQ COPY LST) LST)
(CONS (CAR LST) COPY) ) )
(REMOVE '(2 5) '((5 2) (2 5) (2 3))'EQUAL) --> ((5 2) (2 3))
(REMOVE-IF 'MINUSP '(-2 0 7 -0.1 3)) --> (0 7 3)
REVERSE [list,object] Function
(REVERSE бЇЁб®Є ®ЎмҐЄв) б®§¤ Ґв Ё ўл¤ Ґв бЇЁб®Є, б®бв®пйЁ©
Ё§ н«Ґ¬Ґв®ў <бЇЁбЄ >, ® ў ®Ўа ⮬ Ї®ап¤ЄҐ.
(REVERSE бЇЁб®Є ®ЎмҐЄв) ўл¤ Ґв н«Ґ¬Ґвл <бЇЁбЄ > ў ®Ўа ⮬
Ї®ап¤ЄҐ, ЇаЁб®Ґ¤ЁҐлҐ Є <®ЎмҐЄвг>. ђҐ§г«мв в пў«пҐвбп в ЄЁ¬ ¦Ґ,
Є Є Ё ЇаЁ а Ў®вҐ дгЄжЁЁ (APPEND (REVERSE list) object), ® ўл§®ў
REVERSE ў Є зҐб⢥ ўв®а®Ј® аЈг¬Ґв Ў®«ҐҐ нд䥪⨢Ґ.
ЏаЁ¬Ґа:
(DEFUN REVERSE (LST OBJ)
((ATOM LST) OBJ)
(REVERSE (CDR LST) (CONS (CAR LST) OBJ))) )
(REVERSE '(A B C D E)) --> (F D C B A)
(REVERSE '(A B C) '(D E F)) --> (C B A D E F)
(REVERSE '(A B C) 'D) --> (C B A . D)
SUBSTITUTE [new,old,list,test] Function
SUBSTITUTE-IF [new,test,list] Function
(SUBSTITUTE ®ўл© бв ал© бЇЁб®Є вҐбв) ў®§ўа й Ґв Є®ЇЁо
ўлб®Є®Ј® га®ўп <бЇЁбЄ >, § ¬Ґй п <®ўлҐ> н«Ґ¬Ґвл ⥠<бв алҐ>
н«Ґ¬Ґвл <бЇЁбЄ >, ¤«п Є®в®але ЇаЁ§ Є Їа®ўҐаЄЁ Ї® <вҐбвг> Ґбвм
Ґ NIL. …б«Ё вҐбв- аЈг¬Ґв Ґбвм NIL Ё«Ё Ґ § ¤ , SUBSTITUTE
ЁбЇ®«м§гҐв EQL-вҐбв.
(SUBSTITUTE-IF ®л© вҐбв бЇЁб®Є) ў®§ўа й Ґв Є®ЇЁо ўлб®Є®Ј®
га®ўп <бЇЁбЄ >, § ¬Ґй п <®ўлҐ> н«Ґ¬Ґвл ўбҐ н«Ґ¬Ґвл
<бЇЁбЄ >, ¤«п Є®в®але ЇаЁ§ Є Їа®ўҐаЄЁ Ї® <вҐбвг> Ґбвм Ґ NIL.
ЏаЁ¬Ґа:
(DEFUN SUBSTITUTE (NEW OLD LST TEST)
((ATOM LST) LST)
( (NULL TEST)
(SETQ TEST 'EQL) ) )
((FUNCALL TEST OLD (CAR LST))
(CONS NEW (SUBSTITUTE NEW OLD (CDR LST) TEST)) )
((SETQ NEW (SUBSTITUTE NEW OLD (CDR LST) TEST))
((EQ NEW (CDR LST)) LST)
(CONS (CAR LST) NEW) )
(SUBSTITUTE 5 2 '(4 2 (3 . 2) 4)) --> (4 5 (3 . 2) 4)
(SUBSTITUTE 'CANNIBALS 'NOUN '(NOUN LIKE TO EAT NOUN) )
--> (CANNIBALS LIKE TO EAT CANNIBALS)
SUBST [new,old,object,test] Function
SUBST-IF [new,test,object] Function
(SUBST ®ўл© бв ал© ®ЎмҐЄв вҐбв) ў®§ўа й Ґв Є®ЇЁо <®ЎмҐЄв >,
§ ¬Ґй п <®ўлҐ> ўбҐ <бв алҐ> Ї®¤ўла ¦ҐЁп <®ЎмҐЄв >, ¤«п
Є®в®але ЇаЁ§ Є Їа®ўҐаЄЁ Ї® <вҐбвг> Ґбвм Ґ NIL. …б«Ё
вҐбв- аЈг¬Ґв Ґбвм NIL Ё«Ё Ґ § ¤ , SUBST ЁбЇ®«м§гҐв EQL-вҐбв.
ЏаЁ¬Ґа:
(DEFUN SUBST (NEW OLD OBJ TEST)
( (NULL TEST)
(SETQ TEST 'EQL) ) )
((FUNCALL TEST OLD OBJ) NEW)
((ATOM OBJ) OBJ)
(LET ( (LEFT (SUBST NEW OLD (CAR OBJ) TEST))
(RIGHT (SUBST NEW OLD (CDR OBJ) TEST)) )
((AND (EQ LEFT (CAR OBJ)) (EQ RIGHT (CDR OBJ)))
OBJ )
(CONS LEFT RIGHT) ) )
(SUBST 5 2 '(4 2 (3 . 2) 4)) --> (4 5 (3 . 5) 4)
MAKE-LIST [n,object,list] Function
(MAKE-LIST n ®ЎмҐЄв бЇЁб®Є) б®§¤ Ґв Ё ўл¤ Ґв бЇЁб®Є Ё§ <n>
н«Ґ¬Ґв®ў, Є ¦¤л© Ё§ Є®в®але ЇаЁЁ¬ Ґв § 票Ґ
<®ЎмҐЄв >, ЇаЁб®Ґ¤ЁҐ®Ј® Є <бЇЁбЄг>. ЋвбгвбвўЁҐ <n>
®в®¦¤Ґбвў«пҐвбп б 0, ®вгвбвўЁҐ <®ЎмҐЄв > Ё <бЇЁбЄ > - б NIL.
ЏаЁ¬Ґа:
(DEFUN MAKE-LIST (N OBJ LST)
((AND (INTEGERP N) (PLUS N))
(CONS OBJ (MAKE-LIST (SUB1 N) OBJ LST)) )
LST )
(MAKE-LIST 4) --> (NIL NIL NIL NIL)
(MAKE-LIST 3 '(A B C)) --> ((A B C) (A B C) (A B C))
(MAKE-LIST 3 5 '(2 3)) --> (5 5 5 2 3)
OBLIST [] Function
(OBLIST) б®§¤ Ґв Ё ўл¤ Ґв бЇЁб®Є ®ЎмҐЄв®ў - в.Ґ. бЇЁб®Є
ЄвЁўле ⥪гйЁ© ¬®¬Ґв бЁ¬ў®«®ў ў бЁб⥬Ґ. ‘Ё¬ў®«л
а бЇ®« Ј овбп ў ⮬ Ї®ап¤ЄҐ, ў Є®в®а®¬ ®Ё Ўл«Ё бзЁв л Ё (Ё«Ё)
бЈҐҐаЁа®ў л бва®Є®ўл¬Ё дгЄжЁп¬Ё: Ў®«ҐҐ ®ўлҐ бЁ¬ў®«л
а бЇ®« Ј овбп б«Ґў ®в Ў®«ҐҐ бв але. Ћв¬ҐвЁ¬, зв® Ґг¦лҐ
бЁ¬ў®«л ўв®¬ вЁзҐбЄЁ ®вЎа блў овбп бЎ®айЁЄ®¬ ¬гб®а (б¬. а §¤Ґ«
"“Їа ў«ҐЁҐ Ї ¬пвмо" ў Ј«.4 ).
ЏаЁ¬Ґа:
(DEFUN OBLIST ()
(construct a list of the symbols in the oblist) )
LENGTH [object] Function
(LENGTH ®ЎмҐЄв) ў®§ўа й Ґв ¤«Ёг <®ЎмҐЄв >, ᮮ⢥вбвўгойго
ҐЈ® вЁЇг ¤ ле. …б«Ё <®ЎмҐЄв> Ґбвм NIL Ё«Ё cons, в® LENGTH
ўл¤ Ґв Є®«ЁзҐбвў® cons-®ў ўлб®Є®Ј® га®ўп (в.Ґ. н«Ґ¬Ґв®ў) ў
®ЎмҐЄвҐ. …б«Ё <®ЎмҐЄв> - бЁ¬ў®«, в® LENGTH ўл¤ Ґв Є®«ЁзҐбвў® ЎгЄў
ў ђ-Ё¬ҐЁ <®ЎмҐЄв >. …б«Ё <®ЎмҐЄв> - зЁб«®, LENGTH ўл¤ Ґв
Є®«ЁзҐбвў® б«®ў (б«®ў® а ў® 2-¬ Ў ©в ¬), вॡ㥬ле ¤«п
а §¬ҐйҐЁп зЁб«®ў®Ј® ўҐЄв®а <®ЎмҐЄв >.
ЏаЁ¬Ґа:
(DEFUN LENGTH (OBJ)
((NULL OBJ) 0)
((SYMBOL OBJ)
(the number of characters in OBJ's print name
string)
((NUMBER OBJ)
(CEILING (ABS OBJ) 65536) )
(ADD1 (LENGTH (CDR OBJ))) )
(LENGTH '(A B C D)) --> 4
(LENGTH NIL) --> 0
(LENGTH 'MULISP) --> 6
(LENGTH -13) --> 1
5.3. ”гЄжЁЁ ¬®¤ЁдЁЄ в®а .
”гЄжЁЁ ¬®¤ЁдЁЄ в®а ўлЇ®«пов ЇҐаҐ ¤аҐб жЁо гЄ § ⥫Ґ© ў
бвагЄвга е ¤ ле LISP. ‘«Ґ¤®ў ⥫м®, ЇаЁ ЁбЇ®«м§®ў ЁЁ дгЄжЁ©
¬®¤ЁдЁЄ в®а ў ¦Ґ ЇаҐ¦¤Ґ ўбҐЈ® १г«мв в Ёе а Ў®вл, Ґ¦Ґ«Ё
ЇҐаҐ¬Ґ п, Є®в®аго ®Ё ў®§ўа й ов. Џг⥬ ¬®¤ЁдЁЄ жЁЁ
бгйҐбвўго饩 бвагЄвгал ¤ ле гбва пҐвбп Ґ®Ўе®¤Ё¬®бвм
а бᬮваҐЁп ўбҐ© ®ў®© бвагЄвгал, Ґб«Ё вॡгҐвбп Ё§¬ҐЁвм «Ёим
в®«мЄ® ¬ «го ҐҐ з бвм.
RPLACA [object1,object2] Function
…б«Ё <®ЎмҐЄв> - Ё ЇаЁ§ Є NIL, Ё зЁб«®, (RPLACA ®ЎмҐЄв1
®ЎмҐЄв2) § ¬Ґй Ґв car-н«Ґ¬Ґв <®ЎмҐЄв 1> гЄ § ⥫Ґ¬ <®ЎмҐЄв2>
Ё ўл¤ Ґв ¬®¤ЁдЁжЁа®ў л© <®ЎмҐЄв1>.
ђҐ§г«мв в в Є®Ј® § ¬ҐйҐЁп § ўЁбЁв ®в вЁЇ <®ЎмҐЄв 1>. …б«Ё
<®ЎмҐЄв1> - бЇЁб®Є, в® 1-© н«Ґ¬Ґв бЇЁбЄ § ¬Ґй Ґвбп
<®ЎмҐЄв2>. …б«Ё <®ЎмҐЄв1> - ЎЁ ஥ ¤ҐаҐў®, в® «Ґў п ўҐвўм
¤ҐаҐў § ¬Ґй Ґвбп <®ЎмҐЄв2>. …б«Ё <®ЎмҐЄв1> - бЁ¬ў®«, ® Ґ
NIL,н«Ґ¬Ґв § 票п бЁ¬ў®« ЇаЁЁ¬ Ґвбп § <®ЎмҐЄв2>. ‚® ўбҐе
б«гз пе ў®§ўа й Ґвбп ¬®¤ЁдЁжЁа®ў л© <®ЎмҐЄв1>.
ЏаЁ¬Ґа:
(DEFUN RPLACA (OBJ1 OBJ2)
((OR (NUMBER OBJ1) (NULL OBJ1)) OBJ1)
(replace the car cell of OBJ1 with a pointer to OBJ2)
OBJ1 )
(SETQ FOO '9A B C)) --> (A B C)
(RPLACA FOO 'D) --> (D B C)
FOO --> (D B C)
RPLACD [object1,object2] Function
…б«Ё <®ЎмҐЄв1> - Ё бЁ¬ў®« NIL, Ё зЁб«®, (RPLACD ®ЎмҐЄв1
®ЎмҐЄв2) § ¬Ґй Ґв cdr-н«Ґ¬Ґ <®ЎмҐЄв 1> гЄ § ⥫Ґ¬ <®ЎмҐЄв2>
Ё ўл¤ Ґв ¬®¤ЁдЁжЁа®ў л© <®ЎмҐЄв1>.
ђҐ§г«мв в в Є®Ј® § ¬ҐйҐЁп § ўЁбЁв ®в вЁЇ <®ЎмҐЄв 1>. …б«Ё
<®ЎмҐЄв1> - бЇЁб®Є, ®бв в®Є бЇЁбЄ ( в.Ґ. ўбҐ, Єа®¬Ґ ЇҐаў®Ј®,
н«Ґ¬Ґвл) § ¬Ґй Ґвбп <®ЎмҐЄв2>. …б«Ё <®ЎмҐЄв1> - ЎЁ ஥
¤ҐаҐў®, в® Їа ў п ўҐвўм ¤ҐаҐў § ¬Ґй Ґвбп <®ЎмҐЄв2>. …б«Ё
<®ЎмҐЄв1> - бЁ¬ў®«, ® Ґ NIL, в® бЇЁб®Є бў®©бвў бЁ¬ў®«
§ ¬Ґй Ґвбп <®ЎмҐЄв2>. ‚® ўбҐе б«гз пе ў®§ўа й Ґвбп
¬®¤ЁдЁжЁа®ў л© <®ЎмҐЄв1>.
ЏаЁ¬Ґа:
(DEFUN RPLACD (OBJ1 OBJ2)
((OR (NUMBERP OBJ1) (NULL OBJ1)) OBJ1)
(replace the cdr cell of OBJ1 with a pointer to OBJ2)
OBJ1 )
(SETQ FOO '(A B C)) --> (A B C)
(RPLACD FOO '(D E)) --> (A D E)
FOO --> (A D E)
Соседние файлы в папке Filp