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

مراجع

  1. انظر، على سبيل المثال، ميتشل، جون سي. (2003)، مفاهيم في لغات البرمجة ، مطبعة جامعة كامبريدج، الصفحات 28-29 ، ISBN  9781139433488، القسم 3.4، الابتكارات في تصميم لغة ليسب . يشير المرجع إلى جهاز IBM 704 ويشرح بشكل صحيح جزء العنوان والإنقاص في خلية cons، ولكنه يحذف بعد ذلك عبارة "جزء من" في شرح مكارثي.
  2. 1 2 704 - آلة معالجة البيانات الإلكترونية http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/704/24-6661-2_704_Manual_1955.pdf
  3. 1 2 مكارثي، جون (1979-02-12). "تاريخ لغة ليسب" .
  4. يناقش مكارثي (1960 ، ص 26-27) السجلات في القائمة المجانية وفي جمع القمامة. 
  5. مكارثي، جون؛ أبراهامز، بول دبليو؛ إدواردز، دانيال جيه؛ هارت، تيموثي بي؛ ليفين، مايكل آي. (1985)، دليل مبرمج لغة ليسب 1.5 ( الطبعة الثانية)، كامبريدج، ماساتشوستس: مطبعة معهد ماساتشوستس للتكنولوجيا، رقم ISBN  978-0-262-13011-0، الصفحة 36، تصف خلايا cons بأنها كلمات تحتوي على حقول "عنوان" و "إنقاص" مكونة من 15 بت.
  6. لغة معالجة القوائم المترجمة إلى لغة فورتران
  7. لغة معالجة قوائم مُجمَّعة بلغة فورتران؛ نسخة HTML
  8. 1 2 مقتطفات من صفحات LISP الخاصة بـ NILS - http://t3x.dyndns.org/LISP/QA/carcdr.html [ تمت إزالة الرابط ]
  9. 1 2 مذكرة مختبر الذكاء الاصطناعي بمعهد ماساتشوستس للتكنولوجيا 6 https://web.archive.org/web/20170706114352/ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-006.pdf
  10. ١ ٢ البرمجة لجهاز كمبيوتر MIT-IBM 704 http://bitsavers.informatik.uni-stuttgart.de/pdf/mit/computer_center/Coding_for_the_MIT-IBM_704_Computer_Oct57.pdf
ملحوظات