في حساب التفاضل والتكامل اللامدا غير المُصنَّف، تُعدّ الدوال النوع الوحيد من البيانات الأولية، ويتم تمثيلها بمصطلحات تجريدية لامدا. أما الأنواع التي تُعتبر عادةً أولية في تدوينات أخرى (مثل الأعداد الصحيحة ، والقيم المنطقية ، والأزواج، والقوائم، والاتحادات المُوسومة ) فهي غير موجودة بشكل أصلي.
ومن ثم تنشأ الحاجة إلى وجود طرق لتمثيل البيانات من هذه الأنواع المختلفة بواسطة مصطلحات لامدا، أي بواسطة وظائف تأخذ وظائف كوسائط لها وتعيد وظائف كنتائج لها.
تُعدّ أرقام تشيرش تمثيلاً للأعداد الطبيعية باستخدام ترميز لامدا. سُمّيت هذه الطريقة نسبةً إلى ألونسو تشيرش ، الذي كان أول من استخدم هذه الطريقة في ترميز البيانات في حساب لامدا. ويمكن توسيع نطاقها لتمثيل أنواع بيانات أخرى بنفس المبدأ.
تستخدم هذه المقالة أحيانًا الصيغة البديلة لمصطلحات تجريد لامدا، حيث يتم اختصار λ x .λ y .λ z . N إلى λ xyz . N ، بالإضافة إلى المُركِّبين القياسيين.وحسب الحاجة.
أزواج الكنائس
أزواج تشيرش هي ترميز تشيرش لنوع الزوج ( الزوج الثنائي ). وجود عنصرين يعني القدرة على توفيرهما لأي مراقب يتوقع عنصرين. وبالتالي، يُمثَّل الزوج كدالة تأخذ وسيطًا داليًا. لا يُقرر الزوج نفسه ما يجب فعله بعناصر الزوج الثنائي. عند إعطائه وسيطه، فإنه يُطبِّق هذا الوسيط على عنصري الزوج. تعريف مُنشئ الزوج ، ودالة اختيار العنصر الأول ، ودالة اختيار العنصر الثاني في حساب لامدا هي:
على سبيل المثال،
معاملات الكنيسة المنطقية
تُشفّر القيم المنطقية ( صواب وخطأ ) في لغة تشيرش . وتستخدم بعض لغات البرمجة هذه القيم كنموذج لتنفيذ العمليات الحسابية المنطقية، ومن أمثلتها Smalltalk و Pico.
يُجسّد المنطق البولياني خيارًا بين بديلين . وبالتالي ، فإن ترميزات الكنيسة للصواب والخطأ هي دوال لمتغيرين:
القيمة true تختار المعامل الأول ؛
يختار الخيار false المعامل الثاني.
التعريفان في حساب التفاضل والتكامل اللامدا هما:
تسمح هذه التعريفات للمسندات (أي الدوال التي تُرجع قيمًا منطقية ) بالعمل مباشرةً كعبارات اختبار if ، بحيث يكون عامل if مجرد دالة تطابق، وبالتالي يمكن حذفه. تعمل كل قيمة منطقية بالفعل كشرط if ، حيث تُجري اختيارًا بين وسيطيها. تُرجع القيمة المنطقية المطبقة على قيمتين إما القيمة الأولى أو الثانية.
تُرجع عبارة then إذا كانت عبارة الاختبار صحيحة ، وعبارة else إذا كانت عبارة الاختبار خاطئة .
بما أن القيم المنطقية مثل "صحيح" و "خطأ" تحدد وسيطها الأول أو الثاني، فإنه يمكن دمجها لتوفير عوامل منطقية. عادةً ما تكون هناك عدة طرق للتنفيذ، سواءً عن طريق معالجة المعاملات مباشرةً أو عن طريق اختزالها إلى القيم المنطقية الأساسية. فيما يلي التعريفات، باستخدام الترميز المختصر كما ذُكر في بداية المقال (حيث p و q هما المسندات؛ وa و b هما القيم العامة):
بعض الأمثلة:
القيم الاختيارية
يتم تمثيل القيمة الاختيارية على النحو التالي:
استخدام مثل هذه القيمة يعني تزويدها بوسيطين - واحد،أما في حالة "الفشل"، أي انعدام القيمة، والحالة الأخرى،، في حالة "النجاح"، هي دالة معالجة يتم تقديمها بتلك القيمة.
تعرف القيمة الاختيارية نفسها الحالة التي تنتمي إليها، وتختار الوسيط المناسب وفقًا لذلك. وهي "تعرف" ذلك بحكم إنشائها على هذا النحو - إما أنها أُنشئت كـأو كما.
لا يملك مستخدم القيمة الاختيارية أي طريقة لمعرفة أي حالة هي إلا من خلال تزويدها بالوسيطين، واحد لكل من الحالتين المحتملتين.
الأرقام الكنسية
الأرقام الكنسية هي تمثيلات للأعداد الطبيعية وفقًا لترميز الكنيسة. الدالة ذات الرتبة العليا التي تمثل العدد الطبيعي n هي دالة تُسقط أي دالة أخرى.إلى تركيبها ذي n ضعف . بعبارة أبسط، يمثل الرقم العدد بتطبيق أي دالة معينة هذا العدد من المرات بالتتابع، بدءًا من أي قيمة ابتدائية معينة:
وبالتالي فإن ترميز الكنيسة هو ترميز أحادي للأعداد الطبيعية، [ 1 ] يتوافق مع العد البسيط . كل عدد من أعداد الكنيسة يحقق ذلك من خلال بنائه.
جميع أرقام الكنيسة هي دوال تأخذ وسيطين. تُعرَّف أرقام الكنيسة 0 ، 1 ، 2 ، ...، كما يلي في حساب التفاضل والتكامل اللامدا :
بدءاً من 0، أي عدم تطبيق الدالة على الإطلاق، ثم الانتقال إلى 1، أي تطبيق الدالة مرة واحدة، ثم 2، أي تطبيق الدالة مرتين متتاليتين، ثم 3، أي تطبيق الدالة ثلاث مرات متتالية، وهكذا :
الرقم الكنسي 3 هو سلسلة من ثلاث عمليات تطبيق متسلسلة لأي دالة معينة، بدءًا من قيمة معينة. تُطبق الدالة المُعطاة أولًا على وسيط مُعطى، ثم تُطبق تباعًا على نتيجتها. النتيجة النهائية ليست الرقم 3 (إلا إذا كان الوسيط المُعطى يساوي صفرًا وكانت الدالة دالة لاحقة ). الدالة نفسها، وليس نتيجتها النهائية، هي الرقم الكنسي 3. الرقم الكنسي 3 يعني ببساطة تكرار شيء ما ثلاث مرات. إنه توضيحٌ جليٌّ لما يُقصد بـ "ثلاث مرات".
الحساب باستخدام الأرقام الكنسية
تُنتج العمليات الحسابية على الأعداد أعدادًا كنتائج. في ترميز تشيرش، تُمثَّل هذه العمليات برموز لامدا المجردة ، والتي عند تطبيقها على أرقام تشيرش التي تُمثل المعاملات، تُختزل إلى أرقام تشيرش التي تُمثل النتائج.
تمثيل الكنيسة للإضافة،، يستخدم الهوية:
العملية اللاحقة،، ويتم الحصول عليها عن طريق اختزال التعبير "":
الضرب،، يستخدم الهوية:
هكذاو وبالتالي، وبفضل ترميز تشيرش الذي يعبر عن التركيب ذي الرتبة n ، فإن عملية الأسيُعطى بواسطة
العملية السابقةالأمر أكثر تعقيدًا بعض الشيء. نحتاج إلى ابتكار عملية يمكن تكرارهاستؤدي الأوقات إلىتطبيقات الدالة المعطاةويتحقق ذلك باستخدام دالة التطابق مرة واحدة فقط، ثم العودة إلى:
كما ذكرنا سابقاً،هي دالة الهوية،اسم المتغيرتم اختيار هذا المصطلح كرمز تذكيري لـ "النتيجة التكرارية". يستخدم هذا التعريف حجة إضافية لتطبيق نموذج تمرير الحالة، نظرًا لأن حساب لامدا يفتقر إلى التغيير (لذا لا يمكن تغيير أي شيء، بل استبداله فقط). انظر أدناه للشرح المفصل.
يشير هذا إلى إمكانية تطبيق وظائف التنصيف والعاملي، على سبيل المثال، بطريقة مماثلة في تمرير الحالة.
على سبيل المثال،يختزل بيتا إلى،يختزل بيتا إلى، و يختزل بيتا إلى.
الطرح،يتم التعبير عن ذلك من خلال التطبيق المتكرر للعملية السابقة لعدد معين من المرات، تمامًا كما يمكن التعبير عن الجمع من خلال التطبيق المتكرر للعملية اللاحقة لعدد معين من المرات، إلخ:
على غرار تعريف المضروب أعلاه، يمكن أيضًا تعريف التكرار باستخدام الخصائص الجوهرية لترميز الكنيسة، وإنشاء تعبير "الرمز" الخاص به، وترك أرقام الكنيسة نفسها تقوم بالباقي:
وهنا، مرة أخرى،.
الطرح والقسمة المباشران
وكما أن الجمع كلاحق متكرر له نظيره في الأسلوب المباشر، كذلك يمكن التعبير عن الطرح بشكل مباشر وأكثر كفاءة:
على سبيل المثال،يتقلص إلى ما يعادل.
وهذا يوفر أيضًا إصدارًا سابقًا آخر، مما يقلل من حجم الإصدار التجريبي (بيتا).:
يُقدّم تعريف مباشر للقسمة بشكل مشابه تمامًا لـ
طلب إلىيتم تحقيق الطرح عن طريقمع إنشاء دورة من الإجراءات التي تصدر بشكل متكرربعدخطوات.
بدلاً من،ويمكن استخدامها أيضًا في كل من التعريفات الثلاثة المذكورة أعلاه.
الفكرة هنا هي كالتالي. الشيء الوحيد المعروف للكنيسة هو الرقمهو الرقمنفسه. بالنظر إلى حجتينووكالعادة، الشيء الوحيد الذي يمكنه فعله هو تطبيق هذا الرقم على الوسيطين، مع تعديله بطريقة ما بحيث يكون لسلسلة التطبيقات التي تم إنشاؤها بطول n وسيط واحد (على وجه التحديد، الوسيط الأيسر).في السلسلة يتم استبدالها بدالة التطابق:
هناهو المعدل، وهو المعدل. منذلا يمكن تغييرها في حد ذاتها، بل يمكن تعديل سلوكها فقط من خلال وسيطة إضافية..
إذن، يتحقق الهدف من خلال تمرير تلك الحجة الإضافيةعلى طول من الخارج إلى الداخل ، مع تعديله حسب الضرورة، مع التعريفات
وهذا بالضبط ما لدينا فيتعبير لامدا الخاص بالتعريف.
الآن بات من السهل بما فيه الكفاية أن نرى ذلك
أي عن طريق انكماش إيتا ثم بالاستقراء، فإنه ينص على أن
وهكذا دواليك.
تحديد المفترس من خلال الأزواج
يمكن ترميز المتطابقة المذكورة أعلاه باستخدام الأزواج بشكل صريح. ويمكن القيام بذلك بعدة طرق، على سبيل المثال،
التوسع لـيكون:
هذا تعريف أبسط في صياغته ولكنه يؤدي إلى تعبير لامدا أكثر تعقيدًا،
تُعتبر الأزواج في حساب لامدا في الأساس مجرد وسائط إضافية، سواء تم تمريرها من الداخل إلى الخارج كما هو الحال هنا، أو من الخارج إلى الداخل كما في الأصل.التعريف. يتبع ترميز آخر الصيغة الثانية من هوية السلف مباشرةً،
وبهذه الطريقة، يكون قريباً جداً من الأصل، "من الخارج إلى الداخل".التعريف، كما أنه يخلق سلسلة منكما هو الحال، ولكن بطريقة أكثر إسرافًا بعض الشيء. إلا أنها أقل إسرافًا بكثير من سابقتها.التعريف هنا. في الواقع، إذا تتبعنا تنفيذه، فسنصل إلى التعريف الجديد، الأكثر تبسيطًا، ولكنه مكافئ تمامًا.
مما يجعل الأمر واضحًا وجليًا تمامًا، وهو أن كل هذا يتعلق بتعديل الوسائط وتمريرها. ويستمر اختزالها على النحو التالي:
يُظهر بوضوح ما يحدث. ومع ذلك، فإن الأصليُعد هذا الخيار أفضل بكثير لأنه يعمل بطريقة تنازلية، وبالتالي فهو قادر على التوقف فورًا إذا تم تحديد وظيفة من قِبل المستخدم.هو اختصار الدائرة. كما يُستخدم النهج التنازلي مع تعريفات أخرى مثل
الحسابمعيتطلب الأمر العديد من عمليات اختزال بيتا. ما لم يتم إجراء الاختزال يدويًا، فإن هذا لا يُشكل فرقًا كبيرًا، ولكن من الأفضل تجنب إجراء هذه العملية الحسابية مرتين (إلا إذا تم استخدام تعريف الطرح المباشر، انظر أعلاه). أبسط دالة لاختبار الأرقام هي IsZero، لذا ضع الشرط في اعتبارك.
لكن هذا الشرط يعادل، لاإذا تم استخدام هذا التعبير، فإن التعريف الرياضي للقسمة المذكور أعلاه يُترجم إلى دالة على الأرقام الكنسية كما يلي:
كما هو مطلوب، يحتوي هذا التعريف على استدعاء واحد لـلكن النتيجة هي أن هذه الصيغة تعطي قيمة.
يمكن حل هذه المشكلة بإضافة 1 إلى n قبل استدعاء دالة القسمة . تعريف دالة القسمة هو،
دالة `divide1` هي تعريف تكراري. يمكن استخدام مُركِّب Y لتنفيذ التكرار. أنشئ دالة جديدة باسم `div by`.
باستخدام آلة حاسبة لحساب التفاضل والتكامل لامدا، يتم اختزال التعبير أعلاه إلى 3، باستخدام الترتيب الطبيعي.
\f.\xf (f (f (x)))
المسندات
الدالة الشرطية هي دالة تُرجع قيمة منطقية (Boolean). وأهم دالة شرطية في الأرقام الكنسية هي، وهو ما يعودإذا كانت حجتها هي رقم الكنيسة، وخلاف ذلك:
يختبر الشرط التالي ما إذا كانت الوسيطة الأولى أصغر من أو تساوي الوسيطة الثانية:
بسبب الهوية
يمكن تطبيق اختبار المساواة على النحو التالي:
في لغات البرمجة
تدعم معظم لغات البرمجة الواقعية الأعداد الصحيحة الأصلية للآلة؛ حيث تقوم الدالتان church و unchurch بتحويل الأعداد الصحيحة غير السالبة إلى ما يقابلها من أرقام Church. تُقدم هذه الدوال هنا بلغة Haskell ، حيث \يُمثل λ في حساب Lambda. وتتشابه تطبيقاتها في اللغات الأخرى.
نوع الكنيسة أ = ( أ -> أ ) -> أ -> أchurch :: Integer -> Church Integer church 0 = \ f -> \ x -> x church n = \ f -> \ x -> f ( church ( n - 1 ) f x )unchurch :: Church Integer -> Integer unchurch cn = cn ( + 1 ) 0
الأرقام الموقعة
إحدى الطرق البسيطة لتوسيع نطاق استخدام أرقام الكنيسة لتشمل الأعداد الموقعة هي استخدام زوج من أرقام الكنيسة، يحتوي على رقمين يمثلان قيمة موجبة وقيمة سالبة. [ 4 ] القيمة الصحيحة هي الفرق بين رقمي الكنيسة.
يتم تحويل العدد الطبيعي إلى عدد موجب بواسطة:
يتم إجراء النفي عن طريق تبديل القيم.
تُصبح القيمة الصحيحة أكثر وضوحًا إذا كان أحد العنصرين يساوي صفرًا. وتُحقق دالة OneZero هذا الشرط.
يمكن تنفيذ التكرار باستخدام مُركِّب Y،
زائد وناقص
يُعرَّف الجمع رياضياً على الزوج كما يلي:
يُترجم التعبير الأخير إلى حساب التفاضل والتكامل لامدا على النحو التالي:
وبالمثل، يتم تعريف الطرح،
العطاء،
اضرب واقسم
يمكن تعريف عملية الضرب من خلال،
يُترجم التعبير الأخير إلى حساب التفاضل والتكامل لامدا على النحو التالي:
يُقدَّم هنا تعريف مشابه للقسمة، باستثناء أن أحد قيم كل زوج يجب أن يكون صفرًا (انظر OneZero أعلاه). تسمح لنا دالة divZ بتجاهل القيمة التي تحتوي على عنصر صفري.
ثم يتم استخدام divZ في الصيغة التالية، وهي نفس الصيغة المستخدمة في الضرب، ولكن مع استبدال mult بـ divZ .
الأعداد النسبية والأعداد الحقيقية
يمكن أيضًا ترميز الأعداد النسبية والأعداد الحقيقية القابلة للحساب في حساب لامدا. يمكن ترميز الأعداد النسبية كزوج من الأعداد الموقعة. أما الأعداد الحقيقية القابلة للحساب، فيمكن ترميزها بعملية تقريبية تضمن أن يكون الفرق بينها وبين القيمة الحقيقية عددًا صغيرًا جدًا. [ 5 ] [ 6 ] تصف المراجع المذكورة برامجًا يمكن، نظريًا، ترجمتها إلى حساب لامدا. بمجرد تعريف الأعداد الحقيقية، تُرمّز الأعداد المركبة تلقائيًا كزوج من الأعداد الحقيقية.
تُبيّن أنواع البيانات والوظائف المذكورة أعلاه أنه يمكن ترميز أي نوع من البيانات أو أي عملية حسابية باستخدام حساب لامدا. هذه هي فرضية تشرش-تورينغ .
ترميزات القوائم
تحتوي القائمة على بعض العناصر مرتبةً. العمليات الأساسية على القوائم هي:
وظيفة
وصف
لا شيء
أنشئ قائمة فارغة
إينيسيل
اختبر ما إذا كانت القائمة فارغة
سلبيات
أضف قيمة معينة إلى قائمة (قد تكون فارغة)
رأس
احصل على العنصر الأول من القائمة
ذيل
احصل على بقية القائمة
شخص واحد
أنشئ قائمة تحتوي على عنصر واحد محدد
إلحاق
قم بدمج قائمتين معًا
مجلد
قم بطي القائمة باستخدام "+" و "0" المعطاة.
ينبغي أن يوفر تمثيل القوائم طرقًا لتنفيذ هذه العمليات. يمكن تعريف بعض هذه العمليات بدلالة عمليات أخرى، مثل
ويمكن تعريف المزيد من حيث التكرار الهيكلي (الطي الأيمن، أي التحول العكسي، وكذلك التحول المتماثل، وما إلى ذلك)، أو التكرار العام باستخدام تكرار النقطة الثابتة.
يُعدّ ترميز قائمة تشيرش النموذج الأمثل لتمثيل القوائم في حساب لامدا. فهو يُمثّل القوائم كعمليات طيّ يمينية ، أي كدوال تُعيد نتائج عملية الطيّ على القائمة باستخدام وسائط يُقدّمها المستخدم.
يتبع هذا النموذج مبدأ "الشيء هو شيء يمكن ملاحظته". وبغض النظر عن التطبيق العملي، فإن طي قائمة معينة من القيم يؤدي إلى النتيجة نفسها. وهذا يوفر نظرة مجردة لماهية القائمة. يُعد ترميز قائمة تشيرش أحد هذه الآليات.
من ناحية أخرى، وبنظرة أكثر واقعية، يمكن تمثيل القوائم على أنها سلسلة من عقد القوائم المرتبطة .
هذا هو ترميز الكنيسة الأصلي للقوائم. يتم تمثيل القائمة بواسطة دالة ثنائية، والتي عند تزويدها بوسيطين - "دالة دمج" و"قيمة حارس" - ستنفذ عملية الطي الأيمن للقائمة المشفرة باستخدام هذين الوسيطين.
في حالة القائمة الفارغة، تُعاد قيمة العنصر الحارس كنتيجة لعملية الطي. أما نتيجة طي قائمة غير فارغة ذات رأس h وذيل t، فهي ناتج دمج الرأس h مع نتيجة طي الذيل t باستخدام الوسيطين المُقدمين، وذلك بواسطة الدالة المُقدمة. وبالتالي ، فإن وسيطي دالة الدمج هما، من الناحية النظرية، العنصر الحالي ونتيجة طي بقية عناصر القائمة.
على سبيل المثال، تُمثَّل قائمةٌ من ثلاثة عناصر x و y و z بمصطلحٍ عند تطبيقه على c و n يُعيد cx (cy (czn)). وبالمثل، فهو تطبيقٌ لسلسلة التركيبات الوظيفية () من التطبيقات الجزئية، ((cx)(cy)(cz)) اسم.
كما تم تقديم بعض التعريفات بشكل عام يعتمد على الطي، وهو ما يصلح لأي ترميز.
إن التطابق الواضح مع أرقام الكنيسة ليس من قبيل الصدفة، إذ يمكن اعتبارها ترميزًا أحاديًا، حيث تُمثَّل الأعداد الطبيعية بقوائم من القيم الوحدوية (أي غير المهمة)، مثل [() () ()]، حيث يُمثِّل طول القائمة العدد الطبيعي. يستخدم الطي من اليمين على هذه القوائم دوالًا تتجاهل بالضرورة قيمة العنصر، وهو ما يُكافئ التركيب الوظيفي المتسلسل، أي ((c())(ج ())(ج ()) ) ن = (ووو) ن، كما هو مستخدم في الأرقام الكنسية.
زوجان كعقدة قائمة
يمكن تمثيل قائمة غير فارغة بزوج من عناصر الكنيسة، حيث
يحتوي أولاً على رأس القائمة
يحتوي الثاني على ذيل القائمة
لكن هذا لا يُعطي تمثيلاً للقائمة الفارغة، لأنه لا يوجد مؤشر "null". لتمثيل القيمة null، يمكن تغليف الزوج بزوج آخر، مما يُعطي ثلاث قيم:
أولاً - مؤشر القائمة الفارغة (قيمة منطقية).
يحتوي الأول من الثاني على الرأس ( السيارة ).
يحتوي الجزء الثاني من الجزء الثاني على الذيل ( cdr ).
باستخدام هذه الفكرة، يمكن تعريف عمليات القوائم الأساسية على النحو التالي: [ 7 ]
تعبير
وصف
العنصر الأول من الزوج صحيح ، مما يعني أن القائمة فارغة.
استرجع مؤشر القيمة الفارغة (أو القائمة الفارغة).
قم بإنشاء عقدة قائمة، وهي ليست فارغة، وقم بإعطائها رأسًا h وذيلًا t .
ثانياً. أولاً هو الرأس.
ثانيًا. الثاني هو الذيل.
في العقدة الفارغة ، لا يتم الوصول إلى العقدة الثانية أبدًا، بشرط أن يتم تطبيق العقدة الأولى والثانية فقط على القوائم غير الفارغة.
حيث تتبع التعريفات، مثل التعريف الأخير، نفس النمط العام للاستخدام الآمن للقائمة، معوبالإشارة إلى بداية القائمة ونهايتها، ويتم التخلص منه، كجهاز اصطناعي:
العمليات الأخرى في هذا الترميز هي:
من المهم تعريف دالة التابع على أرقام تشيرش بطريقة كسولة، أي succ := λ nfx . f(nfx) ، بدلاً من succ := λ nfx . nf(fx) ، بحيث ينتج عن طول الدالة أرقام كسولة، وذلك لتحقيق أقصى قدر من الكسل في عمليات الاختزال ضمن استراتيجية الاختزال من أعلى اليسار. بعبارة أخرى، لسنا بحاجة لمعرفة قيمة الطول النهائي إذا كان كل ما نحتاج معرفته هو ما إذا كان غير صفري أم لا.
سكوت يسرد
تتبع ترميز سكوت لأنواع البيانات بنيتها الظاهرية دون مراعاة التكرار في نوع البيانات. في نمط تعريفات أنواع البيانات الجبرية، المعروف أيضًا باسم "فصل الاقترانات" أو "مجموع المنتجات"، يُمثل هذا الترميز البيانات المعطاة كدالة تتوقع عددًا من الوسائط يساوي عدد البدائل في تعريف نوع البيانات الخاص بها، حيث يُتوقع أن يكون كل وسيط دالة "معالجة" قادرة على التعامل مع عدد وسائط البيانات المُعطى، والتي ستتوافق مع حقول البيانات الخاصة بذلك البديل.
عند إدخال جميع المعالجات كوسائط، ستستدعي دالة تمثيل البيانات المعالج المناسب مع البيانات الداخلية المقابلة. وبذلك، يمكن القول إن القيم المشفرة باستخدام ترميز سكوت تجسد معالجة حالات مطابقة الأنماط لنوع بياناتها.
بالنسبة للقوائم، فهذا يعني تعريف نوع البيانات لـ
ويتم تمثيل القوائم على النحو التالي:
تتطلب العمليات المتكررة على قوائم سكوت عادةً استخدامًا صريحًا للتكرار، على سبيل المثال باستخدامالمُركِّب، أو تعريفات التطبيق الذاتي الصريحة. أحد الأمثلة على ذلك هو دالة foldr ، على عكس كونها عديمة التأثير في ترميز Church. لكن دالة tail متاحة فورًا، لذا فإن تعريفها هنا أبسط بكثير بالمقارنة. انظر ترميز Scott للمزيد.
يمكن اعتبار ترميز سكوت بمثابة استخدام لفكرة الاستمرارية ، مما قد يؤدي إلى تبسيط الكود [ 9 ] . في هذا النهج، نستفيد من إمكانية فحص القوائم باستخدام تعبيرات مطابقة الأنماط . على سبيل المثال، باستخدام ترميز سكالاlist ، إذا كان يمثل قيمة من النوع Listمع قائمة فارغة Nilومنشئ، Cons(h, t)فيمكننا فحص القائمة وحساب nilCodeفي حالة كون القائمة فارغة، و consCode(h, t)عندما لا تكون فارغة.
قائمة مطابقة { حالة Nil => nilCode حالة Cons ( h , t ) => consCode ( h , t ) }
يُحدد ذلك listمن خلال كيفية تأثيره على nilCodeو consCode. لذلك، نُعرّف القائمة على أنها دالة تقبل مثل nilCodeو consCodeكمعاملات، بحيث يمكننا ببساطة كتابة ما يلي بدلاً من مطابقة النمط أعلاه:
لنرمز بـ إلى nالمعامل المقابل لـ nilCodeو بـ إلى cالمعامل المقابل لـ consCode. إذن، القائمة الفارغة هي التي تُرجع الوسيط صفرًا:
القائمة غير الفارغة ذات الرأس hوالذيل tتُعطى بواسطة
وبشكل أعم، نوع بيانات جبري معتصبح البدائل دالة معالمعلمات، كل منها عبارة عن دالة مراقبة/معالجة للبديل المقابل لها. عندمايحتوي مُنشئ البديل th علىتأخذ الدالة المعالجة المقابلة الوسائطوكذلك الحجج.
يمكن تنفيذ ترميز سكوت في حساب لامدا غير المُحدد النوع، بينما يتطلب استخدامه مع الأنواع نظام أنواع يتضمن الاستدعاء الذاتي وتعدد أشكال الأنواع. قائمةٌ تحتوي على عنصر من النوع E في هذا التمثيل، والتي تُستخدم لحساب قيم من النوع C، سيكون لها تعريف النوع الاستدعائي التالي، حيث يشير الرمز '=>' إلى نوع الدالة :
نوع List = C => // وسيط فارغ ( E => List => C ) => // وسيط ثابت C // نتيجة مطابقة النمط
القائمة التي يمكن استخدامها لحساب أنواع عشوائية سيكون لها نوع يُحدد كميًا على C. القائمة العامة في Eستأخذ أيضًا Eكمعامل نوع.
ملاحظات عامة
يؤدي تطبيق ترميز Church بشكل مباشر إلى إبطاء بعض عمليات الوصول منل، أينيُعدّ حجم بنية البيانات عاملاً هاماً ، مما يجعل ترميز Church غير عملي. [ 10 ] وقد أظهرت الأبحاث إمكانية معالجة هذه المشكلة من خلال تحسينات مُوجّهة، إلا أن معظم لغات البرمجة الوظيفية تُوسّع تمثيلاتها الوسيطة لتشمل أنواع البيانات الجبرية . [ 11 ] ومع ذلك، يُستخدم ترميز Church بكثرة في الحجج النظرية، كونه تمثيلاً طبيعياً للتقييم الجزئي وإثبات النظريات. [ 10 ] يُمكن تحديد أنواع العمليات باستخدام أنواع ذات رتبة أعلى ، [ 12 ] كما يُمكن الوصول بسهولة إلى الاستدعاء الذاتي الأولي. [ 10 ] ويُبسّط افتراض أن الدوال هي أنواع البيانات الأولية الوحيدة العديد من البراهين.
يُعدّ ترميز تشيرش كاملاً، لكن على المستوى التمثيلي فقط. هناك حاجة إلى دوال إضافية لترجمة هذا التمثيل إلى أنواع بيانات شائعة، لعرضها على المستخدمين. لا يمكن عمومًا تحديد ما إذا كانت دالتان متساويتين امتداديًا نظرًا لعدم إمكانية حسم التكافؤ وفقًا لنظرية تشيرش . قد تُطبّق عملية الترجمة الدالة بطريقة ما لاسترجاع القيمة التي تُمثّلها، أو للبحث عن قيمتها كمصطلح لامدا حرفي. يُفسّر حساب لامدا عادةً باستخدام المساواة القصدية . توجد مشاكل محتملة في تفسير النتائج بسبب الاختلاف بين التعريف القصدي والتعريف الامتدادي للمساواة.
↑ جانسن، جان مارتن (2013)، "البرمجة في حساب لامدا: من تشرش إلى سكوت والعودة"، جمال الشفرة الوظيفية ، سلسلة محاضرات في علوم الحاسوب، المجلد 8106، سبرينغر-فيرلاغ، الصفحات 168-180 ، doi : 10.1007/978-3-642-40355-2_12 ، ISBN978-3-642-40354-5.
↑ جانسن، جان مارتن (2013). "البرمجة في حساب لامدا: من تشيرش إلى سكوت والعودة". في: أشتن، بيتر؛ كوبمان، بيتر دبليو إم (محرران). جمال الشفرة الوظيفية - مقالات مهداة إلى رينوس بلاسميير بمناسبة عيد ميلاده الحادي والستين . سلسلة محاضرات في علوم الحاسوب. المجلد 8106. سبرينغر. الصفحات 168-180 . doi : 10.1007/978-3-642-40355-2_12 . ISBN978-3-642-40354-5.
1 2 3 ترانكون إي ويدمان، بالتاسار؛ بارناس، ديفيد لورج (2008). "التعبيرات الجدولية والبرمجة الوظيفية الكاملة". في أولاف تشيتيل؛ زولتان هورفاث؛ فيكتوريا زوك (محررون). تنفيذ وتطبيق اللغات الوظيفية . ورشة العمل الدولية التاسعة عشرة، IFL 2007، فرايبورغ، ألمانيا، 27-29 سبتمبر 2007. أوراق مختارة منقحة. سلسلة محاضرات في علوم الحاسوب. المجلد 5083. الصفحات 228-229 . doi : 10.1007/978-3-540-85373-2_13 . ISBN978-3-540-85372-5.
↑ جانسن، جان مارتن؛ كوبمان، بيتر دبليو إم؛ بلاسميير، مارينوس جيه. (2006). "التفسير الفعال عن طريق تحويل أنواع البيانات والأنماط إلى دوال". في نيلسون، هنريك (محرر). اتجاهات في البرمجة الوظيفية. المجلد 7. بريستول: إنتلكت. الصفحات 73-90 . CiteSeerX 10.1.1.73.9841 . ISBN978-1-84150-188-8.
كيمب، كولين (2007). "§2.4.1 القيم الطبيعية لكنيسة، §2.4.2 القيم المنطقية لكنيسة، الفصل 5: تقنيات الاشتقاق للبرمجة الوظيفية الكاملة" . الأسس النظرية للبرمجة الوظيفية الكاملة العملية.(دكتوراه). كلية تكنولوجيا المعلومات والهندسة الكهربائية، جامعة كوينزلاند. الصفحات 14-17 ، 93-145 . CiteSeerX 10.1.1.149.3505 . كل ما يتعلق بتشفير الكنيسة والتشفيرات المماثلة الأخرى، بما في ذلك كيفية اشتقاقها والعمليات التي تُجرى عليها، انطلاقًا من المبادئ الأساسية.