كيف ألحق ببرنامج مخطط؟

إن إضافة عنصر إلى رأس القائمة الفرعية (القائمة النقابية) أمر بسيط للغاية:

> (cons '(ding . 53) '((foo . 42) (bar . 27)))
((ding . 53) (foo . 42) (bar . 27))

إلحاق الذيل من alist قليلا اصعب على الرغم من. بعد بعض التجارب ، أنتجت هذا:

> (define (alist-append alist pair) `(,@alist ,pair))
> (alist-append '((foo . 42) (bar . 27)) '(ding . 53))
'((foo . 42) (bar . 27) (ding . 53))

ومع ذلك ، يبدو لي ، أن هذا ليس هو الحل الاصطلاحي. فكيف يتم هذا عادة في مخطط؟ أو هل هذا في الواقع الطريق؟

0
وأضاف تحرير
الآراء: 1
أنا كذلك ؛) على محمل الجد ، ليس هذا غريبًا كما يبدو. لديها فقط بناء جملة مضحك. بعد فترة ، تتوقف عن ملاحظة هذا المضحك. أنا مجرد هواية القرصنة مع مخطط ، ولكن أنا تقريبا اعتدت عليه بالفعل.
وأضاف المؤلف troelskn, مصدر
أنا في رهبة من الناس الذين يمكن أن نفهم لغات مثل مخطط
وأضاف المؤلف Danimal, مصدر

1 إجابة

يعرف Lisp العام وظيفة تسمى ACONS لهذا الغرض بالضبط ، حيث

(acons key value alist)

ما يعادل:

(cons (cons key value) alist)

هذا يشير بقوة إلى أن مجرد الإلقاء على alist هو اصطلاحي. لاحظ أن هذا يعني شيئين:

  1. أثناء إجراء عمليات البحث عادةً من الأمام إلى الخلف ، تكون للجمعيات المضافة حديثًا الأولوية على الجمعيات القديمة. يمكن استخدام ذلك لتنفيذ ساذج للبيئات المعجمية والديناميكية.
  2. في حين أن الإشارة إلى القائمة هي O (1) ، فإن الإلحاق يكون بشكل عام O (n) حيث n هو طول القائمة ، لذلك فإن الاستخدام الاصطلاحي هو الأفضل للأداء بالإضافة إلى كونه الأفضل من الناحية الأسلوبية.
0
وأضاف