1.2.4.1.Spesialnыye funksii.
Konstanta predstavlyayetsya kak argument spesialnoy funksii QUOTE v vide spiska:
(QUOTE (CONST ))
Ispolzuyetsya i sokraщyennaya zapis – apostrof pered proizvolnыm dannыm.
'(CONST )
V zavisimosti ot konteksta odni i te je obyektы mogut vыpolnyat rol peremennыx ili konstant, prichem znacheniya i togo, i drugogo mogut bыt proizvolnoy slojnosti. Yesli obyekt vыpolnyayet rol konstantы, to dlya ob’yavleniya konstantы dostatochno zablokirovat yego vыchisleniye, to yest kak bы vzyat yego v kavыchki (quotation), vыdelyayuщiye bukvalnoye ispolzovaniye fraz, ne trebuyuщyeye obrabotki. Dlya takoy blokirovki vvoditsya spesialnaya unarnaya funksiya QUOTE, predoxranyayuщaya svoy argument ot vыchisleniya.
(QUOTE A)
|
Konstanta A ob’yavlena.
|
(QUOTE (A B C) )
|
Konstanta (A B C) ob’yavlena.
|
(ATOM (QUOTE A)) = T
|
Argumentom predikata "ATOM" yavlyayetsya konstanta – atom "A"
|
Postroit funksiyu mojno s pomoщyu Lambda-konstruktora:
(LAMBDA (x) (CAR (CDR (CDR x))) )
Pri vыzove takoy bezыmyannoy funksii zaodno proisxodit zadaniye znacheniy parametrov - svyazannыx peremennыx:
((LAMBDA (x) (atom x)) 123) ; = T
X poluchit znacheniye 123 na vremya primeneniya postroyennoy bezыmyannoy funksii, deystviye kotoroy zaklyuchayetsya v vыyasnenii, atom li argument funksii.
Svyazannuyu peremennuyu mojno ob’yavit spesialnoy funksiyey Lambda, a znacheniye ona poluchit pri vыzove funksii.
Sootvetstviye mejdu nazvaniyem funksii i yeye opredeleniyem mojno zadat s pomoщyu spesialnogo konstruktora funksiy DEFUN, pervыy argument kotorogo - imya funksii, vtoroy – sobstvenno imenuyemoye opredeleniye funksii. Formalnыm rezultatom DEFUN yavlyayetsya yeye pervыy argument, kotorыy stanovitsya obyektom drugoy kategorii. On menyayet svoy status – teper eto imya novoy funksii.
(DEFUN tretiy (x) (CAR (CDR (CDR x))) ))
Imenovaniye funksiy rabotayet podobno zadaniyu znacheniy peremennыm. Identifikator predstavlyayet strukturu, simvoliziruyuщuyu funksionalnыy obyekt. V ney soderjitsya spisok formalnыx parametrov funksii i telo yeye opredeleniya – argumentы dlya lyambda-konstruktora.
Obыchno v rassujdeniyax o peremennыx i konstantax molchalivo podrazumevayetsya, chto rech idet o dannыx. Raznisa mejdu konstantami i peremennыmi zaklyuchayetsya lish v tom, chto znacheniye peremennoy mojet bыt v lyuboy moment izmeneno, a konstanta izmenyayetsya suщyestvenno reje. Lisp rassmatrivayet predstavleniya funksiy kak dannыye, poetomu funksii mogut bыt kak konstantnыmi, tak i peremennыmi.
Predstavleniya funksii mogut vыchislyatsya i peredavatsya kak parametrы ili rezultatы drugix funksiy.
Sootvetstviye mejdu imenem funksii i yeye opredeleniyem mojet bыt izmeneno, podobno tomu, kak menyayetsya sootvetstviye mejdu imenem peremennoy i yeye znacheniyem.
Vetvleniye (uslovnoye vыrajeniye) xarakterizuyetsya tem, chto xod prosessa zavisit ot nekotorыx usloviy. Usloviya sleduyet sgruppirovat v obщiy komplekt i sootnesti s podxodyaщimi formami. Takuyu organizasiyu prosessa vыchisleniya obespechivayet spesialnaya funksiya COND (condition). Yeye argumentami yavlyayutsya vetvi, predstavlennыye kak dvuxelementnыye spiski, soderjaщiye predikatы i sootvetstvuyuщiye im vыrajeniya. Kolichestvo vetvey ne ogranicheno. Obrabatыvayutsya oni po osoboy sxeme: snachala vыchislyayutsya pervыye elementы argumentov po poryadku, poka ne naydetsya predikat so znacheniyem "istina". Zatem vыbirayetsya vtoroy element etogo argumenta i vыchislyayetsya yego znacheniye, kotoroye i schitayetsya znacheniyem vsego uslovnogo vыrajeniya.
(COND (p1 e1) (p2 e2) ... (pk ek) )
Kajdыy predikat pi ili vetv ei mojet bыt lyuboy formы: peremennaya, konstanta, vыzov funksii, kompozisiya funksiy, uslovnoye vыrajeniye.
Obыchnoye uslovnoye vыrajeniye (if Predicate Then Else) ili (yesli Predicate to Then inache Else) mojet bыt predstavleno s pomoщyu funksii COND sleduyuщim obrazom:
(COND (Predicate Then)(T Else))
Ili boleye naglyadno:
(COND (Predicate Then )
(T Else ) )
Vыchisleniye ryada form v opredelenii mojet bыt obuslovleno zaraneye zadannыmi predikatami.
(COND ((EQ (CAR x) (QUOTE A))
(CONS (QUOTE B) (CDR x))) (T x) )
Atom "T" predstavlyayet tojdestvennuyu istinu. Znacheniye vsego uslovnogo vыrajeniya poluchayetsya zamenoy pervogo elementa iz znacheniya peremennoy x na B v tom sluchaye, yesli (CAR x) sovpadayet s A.
Ob’yavlennыye zdes spesialnыye funksii QUOTE, COND, LAMBDA i DEFUN suщyestvenno otlichayutsya ot elementarnыx funksiy CAR, CDR, CONS, ATOM, EQ pravilom obrabotki argumentov. Obыchnыye funksii poluchayut znacheniya argumentov, predvaritelno vыchislennыye sistemoy programmirovaniya po formulam fakticheskix parametrov funksii.
Spesialnыye funksii ne trebuyut takoy predvaritelnoy obrabotki parametrov.
Oni sami mogut vыpolnyat vse neobxodimoye, ispolzuya predstavleniye fakticheskix parametrov v vide S-vыrajeniy.
Do'stlaringiz bilan baham: |