CAR و CDR
في برمجة الحاسوب ، CAR ( car) / k ɑːr /ⓘ وCDR(cdr) ( / ˈكʌدə r /ⓘ أو / ˈkʊdər / هي عمليات أولية علىconsتعبيرات Sغير الذرية") تم تقديمها في لغة برمجة Lisp .تتكون خلية cons منمؤشرين؛carالمؤشر الأول، وتستخرج عملية cdrالمؤشر الثاني.
وبالتالي، فإن قيمة التعبير هي ، وقيمة التعبير هي .(car (cons xy))x(cdr (cons xy))y
عند استخدام خلايا cons لتنفيذ القوائم المرتبطة أحادية الاتجاه (بدلاً من الأشجار والهياكل الأكثر تعقيدًا )، تُعيد عملية car العنصر الأول من القائمة، بينما تُعيد عملية cdr باقي عناصر القائمة. ولهذا السبب، تُسمى هذه العمليات أحيانًا first و rest أو head و tail .
أصل الكلمة
تم تطبيق لغة Lisp في الأصل على جهاز الكمبيوتر IBM 704 ، في أواخر الخمسينيات من القرن الماضي.
التفسير الشائع بأن CAR و CDR يرمزان إلى "محتويات سجل العنوان" و "محتويات سجل الإنقاص" [ 1 ] لا يتطابق تمامًا مع بنية IBM 704؛ فجهاز IBM 704 لا يحتوي على سجل عنوان يمكن للمبرمج الوصول إليه، وتطلق IBM على سجلات تعديل العنوان الثلاثة اسم "سجلات الفهرسة".
يتميز المعالج 704 والمعالجات اللاحقة له بطول كلمة 36 بت ومساحة عناوين 15 بت . احتوت هذه الحواسيب على نوعين من التعليمات ، أحدهما، وهو النوع A، يتضمن بادئة رمز عملية قصيرة من 3 بت، وحقلين من 15 بت يفصل بينهما وسم من 3 بت. كان الحقل الأول من 15 بت هو عنوان المعامل، بينما كان الثاني يحتوي على قيمة إنقاص أو عدّ. يُحدد الوسم أحد سجلات الفهرسة الثلاثة . كانت عملية الفهرسة في المعالج 704 عملية طرح، ولذلك سُميت القيمة المراد تحميلها في سجل الفهرسة "إنقاصًا". [ 2 ] : ص 8. احتوى جهاز المعالج 704 على تعليمات خاصة للوصول إلى حقلي العنوان والإنقاص في الكلمة. [ 2 ] : ص 26. ونتيجة لذلك، كان من الفعال استخدام هذين الحقلين لتخزين المؤشرين اللازمين للقائمة ضمن كلمة واحدة. [ 3 ] : مقدمة.
وبالتالي، فإن "CAR" تعني "محتويات جزء العنوان من السجل". ويشير مصطلح "السجل" في هذا السياق إلى "موقع الذاكرة". [ 4 ] [ 5 ]
الوظائف السابقة [ 6 ] [ 7 ] للغة ليسب:
car(محتويات جزء العنوان من رقم السجل)،cdr(محتويات الجزء الناقص من رقم السجل)،cpr(محتويات الجزء البادئ من رقم السجل)، وctr(محتويات جزء العلامة من رقم التسجيل)،
كل منها يأخذ عنوان الجهاز كوسيط، ويقوم بتحميل الكلمة المقابلة من الذاكرة، ويستخرج البتات المناسبة.
704 ماكرو
كان ماكرو التجميع 704 الخاص بـ : [ 8 ] [ 9 ] [ 10 ]car
LXD JLOC 4 # C(إنقاص JLOC) → C(C) # تحميل إنقاص الموقع JLOC في سجل الفهرس C CLA 0 , 4 # C(0 - C(C)) → C(AC) # يستقبل سجل AC عنوان بداية القائمة PAX 0 , 4 # C(عنوان AC) → C(C) # تحميل عنوان AC في سجل الفهرس C PXD 0 , 4 # C(C) → C(إنقاص AC) # مسح AC وتحميل سجل الفهرس C في إنقاص ACكان ماكرو التجميع 704 الخاص بـ cdr: [ 8 ] [ 9 ] [ 10 ]
LXD JLOC 4 # C(إنقاص JLOC) → C(C) # تحميل إنقاص الموقع JLOC في سجل الفهرس C CLA 0 , 4 # C(0 - C(C)) → C(AC) # يستقبل سجل AC عنوان بداية القائمة PDX 0 , 4 # C(إنقاص AC) → C(C) # تحميل إنقاص AC في سجل الفهرس C PXD 0 , 4 # C(C) → C(إنقاص AC) # مسح AC وتحميل سجل الفهرس C في إنقاص ACيمكن إعادة تجميع كلمة الآلة بواسطة cons ، والتي تأخذ أربعة وسائط ( a ، d ، p ، t ).
تم إسقاط أجزاء البادئة والوسم في المراحل المبكرة من تصميم لغة Lisp، مما ترك CAR و CDR و CONS ذات وسيطين. [ 3 ]
المؤلفات
يمكن إعطاء تركيبات و أسماءً قصيرةً وسهلة النطق تقريبًا من نفس الشكل. في لغة ليسب، هي مكافئة لـ ؛ وقيمتها . وبالمثل، (تُنطق / ˈkeɪɑːr / ) هي نفسها ؛ وقيمتها . تُعرّف معظم لغات ليسب، مثل Common Lispcar و Scheme ، جميع تنويعات تركيبات و بشكل منهجي ، والتي تتراوح بين اثنين إلى أربعة تركيبات .cdr(cadr '(1 2 3))(car (cdr '(1 2 3)))2(caar '((1 2) (3 4)))(car (car '((1 2) (3 4))))1carcdr
لغات برمجة أخرى
تستخدم العديد من اللغات (وخاصةً اللغات الوظيفية واللغات المتأثرة بالنموذج الوظيفي ) قائمة مرتبطة أحادية كبنية بيانات أساسية، وتوفر عناصر أو دوالًا أولية مشابهة لـ " car" و " cdr". تُسمى هذه العناصر بأسماء مختلفة firstمثل و و restو head، tailإلخ. في لغة ليسب، لا تُستخدم خلية cons فقط لبناء قوائم مرتبطة، بل أيضًا لبناء هياكل أزواج وهياكل أزواج متداخلة، أي أن cdrمحتوى خلية cons ليس بالضرورة قائمة. في هذه الحالة، توفر معظم اللغات الأخرى عناصر أولية مختلفة لأنها عادةً ما تميز بين هياكل الأزواج وهياكل القوائم إما من حيث النوع أو الدلالة. خاصةً في اللغات المكتوبة، تحتوي القوائم والأزواج والأشجار على دوال وصول مختلفة ذات توقيعات أنواع مختلفة: في لغة هاسكل ، على سبيل المثال، تصبح carو عند التعامل مع نوع زوج. لذلك، فإن النظائر الدقيقة لـ و نادرة في اللغات الأخرى. تستخدم كلوجر بدلاً من و أو بدلاً من . من ناحية أخرى، تستخدم لغة لوجو بدلاً من و بدلاً من .cdrfstsndcarcdrfirstcarnextrestcdrfirstcarbutfirstcdr
مراجع
- ↑ انظر، على سبيل المثال، ميتشل، جون سي. (2003)، مفاهيم في لغات البرمجة ، مطبعة جامعة كامبريدج، الصفحات 28-29 ، ISBN 9781139433488، القسم 3.4، الابتكارات في تصميم لغة ليسب . يشير المرجع إلى جهاز IBM 704 ويشرح بشكل صحيح جزء العنوان والإنقاص في خلية cons، ولكنه يحذف بعد ذلك عبارة "جزء من" في شرح مكارثي.
- 1 2 704 - آلة معالجة البيانات الإلكترونية http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/704/24-6661-2_704_Manual_1955.pdf
- 1 2 مكارثي، جون (1979-02-12). "تاريخ لغة ليسب" .
- ↑ يناقش مكارثي (1960 ، ص 26-27) السجلات في القائمة المجانية وفي جمع القمامة.
- ↑ مكارثي، جون؛ أبراهامز، بول دبليو؛ إدواردز، دانيال جيه؛ هارت، تيموثي بي؛ ليفين، مايكل آي. (1985)، دليل مبرمج لغة ليسب 1.5 ( الطبعة الثانية)، كامبريدج، ماساتشوستس: مطبعة معهد ماساتشوستس للتكنولوجيا، رقم ISBN 978-0-262-13011-0، الصفحة 36، تصف خلايا cons بأنها كلمات تحتوي على حقول "عنوان" و "إنقاص" مكونة من 15 بت.
- ↑ لغة معالجة القوائم المترجمة إلى لغة فورتران
- ↑ لغة معالجة قوائم مُجمَّعة بلغة فورتران؛ نسخة HTML
- 1 2 مقتطفات من صفحات LISP الخاصة بـ NILS - http://t3x.dyndns.org/LISP/QA/carcdr.html [ تمت إزالة الرابط ]
- 1 2 مذكرة مختبر الذكاء الاصطناعي بمعهد ماساتشوستس للتكنولوجيا 6 https://web.archive.org/web/20170706114352/ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-006.pdf
- ١ ٢ البرمجة لجهاز كمبيوتر MIT-IBM 704 http://bitsavers.informatik.uni-stuttgart.de/pdf/mit/computer_center/Coding_for_the_MIT-IBM_704_Computer_Oct57.pdf
- ملحوظات
- راسل، ستيف . "كتابة البرامج وتصحيح أخطائها" (ملف PDF) . مركز الحوسبة RLE ومعهد ماساتشوستس للتكنولوجيا. منشورات وأرشيف CSAIL الرقمي (مذكرة). مذكرة الذكاء الاصطناعي ، العدد 6. كامبريدج ، ماساتشوستس. OCLC 35415961. تاريخ الاسترجاع: 20 يوليو 2017 . (للاطلاع على المستندات، انظر صفحة المساعدة: FTP )
- فاس، فرانس (2006-01-10). "أصل CAR و CDR في لغة LISP" .
- غراهام، بول (1996). لغة ANSI Common Lisp . برنتيس هول. ISBN 978-0-13-370875-2.
- بارسكي، كونراد (2010). أرض ليسب : تعلم البرمجة بلغة ليسب، لعبة تلو الأخرى! سان فرانسيسكو، كاليفورنيا: دار نشر نو ستارش. رقم ISBN 978-1-59327-281-4.
- مكارثي، جون (1960). "الدوال التكرارية للتعبيرات الرمزية وحسابها آليًا، الجزء الأول." (ملف PDF) . مجلة اتصالات رابطة آلات الحوسبة . 3 (4). رابطة آلات الحوسبة، نيويورك، نيويورك، الولايات المتحدة الأمريكية: 184-195 . doi : 10.1145/367177.367199 . S2CID 1489409 .
- لغة البرمجة ليسب
