Кіріспе

Lisp бағдарламалау тіліндегі құрылым. Компьютерлік бағдарламалауда CAR (car) /k//ɑr//audio=en us car.ogg/ және CDR (cdr) ('/k//ʌ//d//ər//audio=US Lisp CDR2.ogg/ немесе '/k//ʊ//d//ər//audio=US Lisp CDR.ogg/) – Lisp бағдарламалау тілінде енгізілген cons ұяшықтарындағы (немесе "атомдық емес S өрнектеріндегі") бастапқы операциялар. Cons ұяшығы екі көрсеткіштен тұрады; car операциясы бірінші көрсеткішті, ал cdr операциясы екінші көрсеткішті шығарады. Осылайша, (car (cons x y)) өрнегі x-ке, ал (cdr (cons x y)) өрнегі y-ке тең болады. Cons ұяшықтары жеке тізбекті тізімдерді (ағаштар және басқа күрделі құрылымдар емес) іске асыру үшін қолданылғанда, car операциясы тізімнің бірінші мүшесін қайтарады, ал cdr тізімнің қалған бөлігін қайтарады. Осы себепті, бұл операциялар кейде "бірінші" және "қалған" немесе "бас" және "құйрық" деп аталады.

Композициялар

Автомобиль және cdr композицияларына қысқа да, белгілі бір деңгейде айтылатын, бірдей формадағы атаулар берілуі мүмкін. Lisp-те (cadr '(1 2 3)) өрнегі (car (cdr '(1 2 3))) өрнегімен тең; оның мәні 2-ге тең. Сол сияқты, (caar '((1 2) (3 4))) (кейде /k//eɪ//ɑr/ деп айтылады) (car (car '((1 2) (3 4)))) өрнегімен бірдей; оның мәні 1-ге тең. Көптеген Lisp жүйелері, мысалы Common Lisp және Scheme, автомобиль және cdr функцияларының екіден төртке дейінгі композицияларының барлық вариацияларын жүйелі түрде анықтайды.

Басқа компьютерлік тілдер

Көптеген тілдер (әсіресе функционалдық тілдер мен функционалдық парадигманың ықпалындағы тілдер) бірден байланысты тізімді негізгі дерек құрылымы ретінде пайдаланады және "car" мен "cdr" сияқты бастапқы функциялар немесе функцияларды ұсынады. Бұлар әртүрлі атаулармен белгіленеді: "бірінші" және "қалған", "бас" және "құйрық" және т.б. Дегенмен, Lisp-те "cons" жасушасы тек байланысты тізімдерді ғана емес, сонымен қатар жұптар мен ішкі жұптар құрылымдарын құру үшін де қолданылады, яғни "cons" жасушасының "cdr" бөлігі міндетті түрде тізім болуы керек емес. Осы жағдайда, көптеген басқа тілдер әртүрлі бастапқы функцияларды ұсынады, себебі олар әдетте жұп құрылымдарын тізім құрылымдарынан типтік немесе мағыналық тұрғыдан ажыратады. Әсіресе типтелген тілдерде тізімдер, жұптар және ағаштар әртүрлі типтік сипаттамалары бар әртүрлі қосымша функцияларына ие болады: мысалы, Haskell-де жұп түрін қолданғанда "car" және "cdr" функциялары "fst" және "snd" болып өзгереді. Сондықтан, "car" және "cdr" функцияларының нақты аналогтары басқа тілдерде сирек кездеседі. Clojure тілінде "car" орнына "first", ал "cdr" орнына "next" немесе "rest" қолданылады. Ал Logo тілінде "car" орнына "first", "cdr" орнына "butfirst" қолданылады.