ЛИСП-основни функции- CAR,CDR,CONS,QUOTE,EVAL Печат
Четвъртък, 16 Февруари 2012 14:29

ЛИСП-основни  функции:CAR,CDR,CONS,QUOTE,EVAL

Програмат на ЛИСП представлява последователност от изрази,коити се изчислчват.Изразите от своя страна по правило са обръщение към функции.Поради това езикът ЛИСП се смята за функционален език.Простият случай на обръщение към функция представлява списък ,на който първият елемент е името на функцията,а следващите елементи са аргументите ,с които тази функция трябва да се изпълни.

Функциите CAR и CDR служат за достъп до елементите на точкова двойка.Първата функция позволява да се получи първият елемент на точковата двойка,а в случая на списък-първия елемент от списъка.Чрез втората функциясе извършва достъп до втория елемент на точковата двойка, а в случая на списък-до подсписъка ,образуван от всички елементи на аргумента без първия.Обръщението на функцията CAR има вида (CAR арг).То представлява списък с първи елемент името на функцията и втори елемент-аргумента на тази функция.Вижда се ,че функцията CAR има само един аргумент и той трябва да е точкова двойка.От друга страна списъкът представява частен случай на точкова двойка,следователно функцията може да се прилага към атоми.При изпълнението на CAR първоначално се пресмята стойността на аргумента,след което функцията се прилага върху така получената стойност която отделя първия елемент на точковата двойка. В ЛИСП процесът на ппресмятане на стойността на аргумента се нарича оценяване,а самата стойност-оценка.Прилагането на функцията върху оценката на аргумента се нарича апликация на функцията.Резултатът се нарича оценка на обръщението към функцията.Това дава възможност при програмирането на ЛИСП да се избегнат многократните присвоявания на стойности на една променлива и оттук по-висока степен на надеждност и вярност на програмата,също така да се прилагат автоматични средства за проверка на програмата.По подобен начин се определя и функцията CDR:тя също има един аргумент,работи с точкови двойки,в частност списъци,но не и атоми, и осъществява достъпа до втория  елемент на точковата двойка.В ЛИСП функциите не променят стойностите на аргументите.При оценяването им,тези стойности само се копират,без да се правят изменения.Забранено е заменянето на аргумента с неговата стойност.

Функцията CONS е съктащение от CONSTRUCT и е предназначена за конструиране на точкови двойки и списъци.Тя е двуаргументна и затова обръщението и се записва (CONS арг1 арг2).Аргументите на  CONS са S-изрази.В резултат на прилагането на  функцията се получава точкова двойка от двата аргумента в противоположност на функциите CAR и CDR,които извличат елементи от точковата двойка.Чрез функцията CONS може да се построяват точкови двойки,да се конструират списъци ,да се добавя елемент отпред в списък и да се влагат списъци един в друг.

Функцията QUOTE служи за да цитираме  S-изрази-атом,списък или точкова двойка без да трябва предварително да се оценява.Тя е едноаргументна и обръщението към нея е (QUOTE арг),където арг е  S-израз ,тоест атом,точкова двойка или списък.Аргументът арг не се оценява,затова той можш да бъде произволен  S-израз.Оценката на обръщението е самият аргумент арг,тоест  функцията QUOTE връща своя аргумент като стойност на обръщението.С помоща на функцията QUOTE се разграничават двете възможни употреби на списъците в ЛИСП-като обръщение към функция и като структори данни.При повечето функции в ЛИСП се извършва оценяване на аргумента.Затова при влагане на функции,се навлиза в дълбочина по време на изпълнението.Но при функцията QUOTE такова навлизане  няма,защото аргумента и не се оценява.

Функцията EVAL е функцияна един аргумент и обръщението е (EVALарг),където арг е израз ,който при обръщение към  EVAL се оценява два пъти. При изпълнението на функцията EVAL първоначално се оценява арг,като се получава стойност на арг.След това вече стойността се оценява още един път.Тази последна оценка е и стойността на обръщението към  функцията EVAL.