(QUOTE (A B C) ) – константа (A B C) элон қилинган
QUOTE функцияси дастурнинг дарахтсимон структурасида белгиланган контейнер вазифасини бажаради. Унинг ёрдами билан ҳар қандай ифодани контейнерга жойлаб қўйиш мумкин. Контейнер такибига жойлаб қўйилган ифодалар устида хеч қандай амаллар бажарилмайди деб белгилаб қўйилган.
6) Тармоқланиш (шартли ифода) COND (condition) махсус функцияси билан таъминланади, унинг аргументлари предикатлар ва уларга мос келадиган ифодаларни ўз ичига олган икки элементли рўйхатлардир. Aргументлар сони ҳар қандай бўлиши мумкин, аммо улар махсус схема бўйича қайта ишланади: биринчи навбатда, аргументларнинг биринчи элементлари “ҳақиқий” қийматига эга предикат топилмагунча, кетма-кетлиги тартибда ҳисобланади. Кейин ушбу аргументнинг иккинчи элементи танланади ва унинг қиймати ҳисоблаб чиқилади, олинган натижа шартли ифоданинг қиймати ҳисобланади.
Ҳар бир pi предикат ёки ei тармоғи ҳар қандай формада бўлиши мумкин: ўзгарувчан, константа, функция чақируви, функция композицияси, шартли ифода.
(COND (p1 e1) (p2 e2) ... (pk ek) )
| |______|________|______шартли ифоданинг тармоқлари
|_____|_________|_________тармоқни танлаш предикати
Моҳиятига кўра QUOTE, COND, LAMBDA ва LABEL функциялари таркиби жиҳатдан структурали дастурлашга яқин дастурлаш услубини қўллаб-қувватлайдиган дастур ва жараёнларни бошқариш воситаларининг асосий тўпламини ташкил этади.
Бу ерда эълон қилинган QUOTE, COND, LAMBDA ва LABEL махсус функциялари аргументларни қайта ишлаш қоидасидаги CAR, CDR, CONS, ATOM, EQ – элементар функцияларидан сезиларли даражада фарқ қилади. Оддий функциялар илгари дастурлаш тизими томонидан ҳисобланган аргументларнинг функцияларини функцияларнинг ҳақиқий параметрлари формулаларидан олади. Махсус функциялар параметрларнинг бундай қайта ишлашини талаб қилмайди. Ҳақиқий параметрларнинг рўйхати ёрдамида улар ўзлари учун зарур бўлган ҳамма нарсани қилишлари мумкин.
7) Таърифлар рекурсив бўлиши мумкин.
2-мисол. Янги “премьер” функцияси исталган маълумотдан биринчи атомни танлайди.
(LABEL премьер (LAMBDA (x)(COND ((ATOM x) x)
(T (премьер (CAR x))) )))
|
8) Ҳақиқий боғланиш механизми ҳали аниқланмаган.
Элементар Лиспнинг асосини C-ифодалар учун, CAR, CDR, CONS, ATOM, EQ – бўйича бешта функция ва дастурлар ҳамда жараёнларни бошқаришни – QUOTE, COND, LAMBDA, LABEL функционал объектларини қуришни таъминлайдиган тўртта махсус функциялар ташкил этади.
Бундай асосда конструкцияларни татбиқ этишнинг аниқ чегаралари EVAL универсал функциясининг таърифи шаклида аниқланади, бу эса рўйхатлар кўринишида келтирилган ифодаларнинг қийматларини ҳисоблаш имконини беради – бу ибораларни талқин қилиш қоидаси.
Бундай ягона маълумотлар структураси ҳар қандай мураккаб дастурларни тақдим қилиш учун етарли даражада бўлиб чиқди.
Дастурнинг бажарилиши муҳим аҳамиятга эга бўлган ифодаларни ифодаловчи маълумотларнинг талқини сифатида ташкил этилган.
9) Функцияларни аргумент ёки натижа сифатида ишлатиб, функционалларни етарли даражада эркин дастурлаш имконияти.
3-мисол. Берилган fn функцияси ёрдамида, компонентлар бўйича иккита рўйхатни қайта ишлаш функциясини аниқланг:
(defun map-comp (fn al vl); AL ва VL элементларга тегишли бўлган fn-ни компонентлар бўйича қўлланилаш
(cond
(xl (cons (funcall fn (car al) (car vl)); берилган FN ни, функцияга ўхшаб чақириш
(map-comp (cdr al) (cdr vl))
) ) ) )
Рўйхатлар билан ифодаланган векторлар бўйича компонентлар устида операцияларни бажариш мумкин. Суммалар, маҳсулотлар, жуфтликлар ва мос келадиган натижалар рўйхатлари:
(map-comp #'+ '(1 2 3) '(4 6 9)); = (5 8 12 ) Суммлар
Do'stlaringiz bilan baham: |