AТОМ функцияси композицион ва атомик объектларни фарқлаш имконини беради: атомларда унинг қиймати “ҳақиқий”, тузилган объектларда эса “ёлғон”.
EQ функцияси атом объектларини тенглик учун текширади.
Лиспдаги ҳақиқат қийматлари орасидаги фарқ одатда бўш рўйхат ва дастурчи дастурда бошқа маъноларни бериши мумкин бўлган бошқа объектлар орасидаги фарқ билан тенглаштирилади. Шундай қилиб, "нотўғри" қиймати ҳар доим Nil бўлади.
CONS ёрдамида ҳар қандай маълумот структурасини атомлардан қуриш мумкин ва унинг исталган қисмини CAR – CDR ёрдамида ажратилиши мумкин.
Бўш рўйхат () вакили сифатида кўрилган Nil атоми ҳар қандай рўйхатда ажратувчи вазифасини бажаради. (A) бир элементли рўйхати (A.Nil) структурасига ўхшашдир. (A1 A2 ... Ak) рўйхати, қуйидаги шаклдаги стуктура сифатида ифодаланиши мумкин:
(A1 . (A2 . ( ... . (Ak . Nil) ... ))).
Аслида, хотирада улар бир хилдаги маълумотлар структурасидир.
Символли маълумотларнинг универсаллиги ҳақидаги гипотезани, авваламбор, дастурни ёзиш вақтида пайдо бўладиган формалар ва унинг асосий конструктиви – ўзгарувчилар, константалар, ифодалар, таърифлар, тармоқлар, функция чақирувларини танлашда текшириш керак:
1) Ифодалашнинг энг содда формаси ўзгарувчидир. Уни атом деб тақдим этиш мумкин.
2) Мураккаб формалар деганда функцияни унинг аргументларига қўллаш (функция чақируви) тушунилади. Функция аргументи ҳар қандай формада бўлиши мумкин. Функция чақируви рўйхат сифатида тузилиши мумкин, унинг биринчи элементи функция тақдим қилиниши, қолган элементлар – функция аргументлари (функция аргумент1 аргумент2 ...).
3) Функциялар номлари ўзгарувчилар каби, атомлар ёрдамида тасвирланган.
Функцсия номи ва унинг таърифи ўртасидаги мосликлар махсус функция конструктори LABEL ёрдамида ўрнатилиши мумкин, унинг биринчи аргументи функция номи, иккинчиси ҳақиқий номланган функция таърифи. LABELнинг формал натижаси унинг биринчи натижаси бўлиб, у бошқа категориядаги объектга айланади. Бу унинг ҳолатистатусини ўзгартиради – энди бу янги функциянинг номи. Функция таърифи функция аргументлари рўйхатини ажратиб кўрсатадиган махсус LAMBDA – конструктори ёрдамида тузилади.
1-misol. “Учинчи” янги функция.
Функция таъарифи
|
Изоҳ
|
(LABEL учинчи
(LAMBDA (x)
(CAR (CDR (CDR x)))
) )
|
янги функция номи
функция параметрлари
функция танаси
|
Функцияларни номлаш ўзгарувчиларга қийматларни бериш каби ишлайди, аммо идентификаторга бошқа категориядаги объект берилади – функционал объектни рамзий маънога эга бўлган структураси, функцияларнинг формал параметрлари рўйхати ва унинг таърифи танаси. Функцияларни тақдим қилишда параметрлар ёки бошқа функциялар натижалари сифатида баҳоланиши ва узатилиши мумкин. Ўзгарувчининг номи ва унинг қиймати ўртасидаги мосликлар ўзгарганидек – функциянинг номи ва унинг таърифи ўртасидаги масликларни ўзгартириш мумкин,
4) Функсиялар композициясини ички қавслар ёрдамида қуриш мумкин.
(функция1 (функция2 аргумент21 аргумент22 ... ) аргумент2 ... )
Тақдим қилинган қоидаларда маълумотлар ва функцияларнинг моҳияти тўғрисида, шунингдек аргументлар ва функционал композицияларни баҳолаш тартиби тўғрисида ҳеч нарса айтилмаган. Бу, дастур ёзишда ишлатиладиган рўйхатларнинг кўринишининг – соф фармаси ҳақида сўз бораяпти. Маълумотлар бўйича операциялар ҳали аниқланмаган бундай синтактик қобиғи деярли ҳар қандай йўналишда ихтисослашиши мумкин бўлган апликатив тизимларни аниқлаш учун амалга ошириш доирасининг умумий тавсифи ҳисобланади. Лисп – бу рўйхатларни қайта ишлашга ихтисослашган апликатив дастурий тизим деб айтишимиз мумкин.
5) Aгар объект константа бўлса, унда унинг константалигини эълон қилиш учун уни ҳисобланишини блокировка қилиш кифоя, яъни уни қайта ишлаш талаб қилмайдиган, сўзма-сўз ишлатилган ибораларни белгилаб, қўштирноқларга олиб қўйиш керак. Бундай блокировка учун QUOTE махсус функцияси жорий этилган, бу функция унинг ягона аргументини хисоблашдан ҳимоя қилади.
Do'stlaringiz bilan baham: |