التكرير (تقنية في البرمجة الوظيفية)

في الرياضيات وعلم الحاسوب، يُعدّ التكرير أو الكرّية أو التقييس (بالإنجليزية: Currying)، تقنية لتحويل دالة تأخذ عدة وسائط إلى تسلسل من عائلات الدوال، تأخذ كل واحدة منها وسيطًا واحدًا فقط.

في المثال النموذجي، نبدأ بدالة تأخذ وسيطين، أحدهما من والآخر من ، وتنتج عناصر في الشكل المحوَّر من هذه الدالة يعامل الوسيط الأول كمعامل، لتكوين عائلة من الدوال وتُنظَّم هذه العائلة بحيث يوجد لكل عنصر في دالة واحدة فقط

في هذا المثال، تصبح نفسها دالة، تأخذ كوسيط، وتُعيد دالة تربط كل بـ التمثيل الرمزي المناسب لذلك طويل نوعًا ما. فالدالة تنتمي إلى مجموعة الدوال أما فتنتمي إلى مجموعة الدوال وعليه، فإن الشيء الذي يربط بـ سيكون من النوع وبهذا الترميز، فإن هي دالة تأخذ عناصر من المجموعة الأولى، وتُعيد عناصر من المجموعة الثانية، وتُكتب بالشكل هذا مثال غير رسمي بعض الشيء؛ إذ تُعرض تعريفات أدق لما يُقصد بـ "عنصر" و"دالة" لاحقًا. وتختلف هذه التعريفات حسب السياق، وتأخذ أشكالًا متعددة تبعًا للنظرية المعتمدة.

التحوير الكاري مرتبط بالتطبيق الجزئي، لكنه ليس الشيء نفسه.[1][2] يمكن استخدام المثال أعلاه لتوضيح التطبيق الجزئي؛ وهو مشابه جدًا. التطبيق الجزئي هو الدالة التي تأخذ الزوج و كوسيطين معًا، وتُعيد وباستخدام الترميز ذاته، تكون صيغة التطبيق الجزئي هي ومكتوبة بهذه الطريقة، يمكن اعتبار دالة التطبيق مقابلة (adjoined) لدالة التحوير الكاري.

يمكن تعريف التحوير الكاري لدالة تحتوي على أكثر من وسيطين باستخدام الاستقراء.

التحوير الكاري مفيد في السياقات العملية والنظرية على حد سواء. ففي البرمجة الوظيفية ولغات البرمجة الأخرى، يوفّر طريقة لإدارة تمرير الوسيطات إلى الدوال والتعامل مع الاستثناءات بشكل تلقائي. أما في علم الحاسوب النظري، فهو يوفّر وسيلة لدراسة الدوال متعددة الوسائط ضمن نماذج نظرية أبسط لا تقبل سوى وسيط واحد. وتُعد الفئات الأحادية المغلقة (بالإنجليزية: closed monoidal categories) الإطار الأكثر تعميمًا للمفهوم الصارم للتحوير الكاري وعكسه، وهي تشكّل أساسًا لتعميم واسع لمقابلة تطابق كاري-هوارد بين الإثباتات والبرامج لتشمل بنيات أخرى كثيرة، مثل ميكانيكا الكم، والكوبوردية، ونظرية الأوتار.[3]

قُدّمت فكرة التحوير الكاري لأول مرة بواسطة جوتلوب فريجه,[4][5] وطُوّرت لاحقًا بواسطة موسى شونفينكل،[5][6][7][8][9][10][11] وطُوّر لاحقًا بواسطة هاسكل كاري.[8][10][12][13]

إلغاء التكرير هو تحويل الثنوية المقابل للتكرير، ويمكن اعتباره شكلاً من نزع التأدية. إذ يأخذ دالة تُعيد كقيمة دالة أخرى ، ويُنتج دالة جديدة تأخذ كوسائط الوسيطات الخاصة بكل من و، وتُعيد كنتيجة تطبيق ثم على تلك الوسائط. ويمكن تكرار هذه العملية.

الدافع

يوفّر التكرير وسيلة للتعامل مع الدوال التي تستقبل عدة معاملات، واستخدامها في أطر عمل لا تسمح إلا بدوال تأخذ معاملًا واحدًا فقط. فعلى سبيل المثال، بعض التقنيات التحليلية لا يمكن تطبيقها إلا على دالة ذات معامل واحد. ومع ذلك، فإن الدوال العملية غالبًا ما تتطلب أكثر من ذلك. وقد بيّن جوتلوب فريجه أن من الكافي توفير حلول لحالة المعامل الواحد، إذ يمكن تحويل دالة متعددة المعاملات إلى سلسلة من الدوال أحادية المعامل. وتُعرف هذه العملية حاليًا باسم التقييس.[14] جميع الدوال "العادية" التي تُصادف عادة في تحليل رياضي أو في برمجة يمكن تقييسها. إلا أن هناك فئات رياضية لا يكون التقييس ممكنًا فيها؛ وأكثر الفئات تعميمًا التي تسمح بالتقييس هي فئة مونودية مغلقة.

بعض لغات البرمجة تستخدم دوال مقيّسة بشكل شبه دائم لتحقيق تعدد المعاملات؛ من الأمثلة البارزة أم أل وهاسكل، حيث أن جميع الدوال في كلتا اللغتين تستقبل معاملًا واحدًا فقط. وهذه الخاصية موروثة من تكامل لامدا، حيث تمثل الدوال متعددة المعاملات عادةً بصيغة مقيّسة.

يرتبط التقييس بتطبيق جزئي، لكنه لا يُعدّ الشيء نفسه.[1][2] عمليًا، يمكن استخدام تقنية الإغلاقات البرمجية لتنفيذ التطبيق الجزئي ونوع من التقييس، من خلال إخفاء بعض المعاملات داخل بيئة ترافق الدالة المقيّسة.

التاريخ

الاسم "تكرير" أو "تقييس" (بالإنجليزية: Currying) يعود إلى عالم المنطق هاسكل كاري، الذي استخدم هذا المفهوم على نطاق واسع، لكن موسى شونفينكل كان قد طرح الفكرة قبل كاري بست سنوات.[10] وقد تم اقتراح اسم بديل لهذا المفهوم وهو "شونفينكلية" (Schönfinkelisation).[15] في السياق الرياضي، يمكن تتبع هذا المبدأ إلى أعمال جوتلوب فريجه في عام 1893.[4][5]

أما أصل مصطلح "currying" (التكرير) فليس واضحًا تمامًا. ديفيد تورنر يقول إن كريستوفر ستراشي هو من صاغ الكلمة في ملاحظاته الدراسية لعام 1967 بعنوان مفاهيم أساسية في لغات البرمجة،[16] لكن المصدر يقدّم المفهوم باعتباره "أداة من ابتكار شونفينكل"، ولا يستخدم مصطلح "currying" صراحة، رغم أن كاري يُذكر لاحقًا في سياق الدوال من الدرجة الأعلى.[7] أما جون س. رينولدز فقد عرّف مصطلح "currying" في ورقة بحثية عام 1972، لكنه لم يدّعِ أنه من ابتكره.[8]

التعريف

يُفهم التقييس (Currying) بسهولة من خلال البدء بتعريف غير رسمي، يمكن بعد ذلك تكييفه ليناسب العديد من المجالات المختلفة. أولًا، يجب توضيح بعض الرموز. تشير الصيغة إلى جميع الدوال من إلى . وإذا كانت دالة من هذا النوع، فإننا نكتب . وليكن هو مجموعة الأزواج المرتبة من عناصر و على التوالي، أي جداء ديكارتي لـ و. قد تكون و مجموعات، أو أنواعًا (types)، أو أنواعًا أخرى من الكائنات، كما سيتم توضيحه لاحقًا.

إذا كانت لدينا دالة:

،

فإن عملية التقييس (currying) تُنشئ دالة جديدة:

.

أي أن تأخذ معاملًا من النوع وتُرجع دالة من النوع . وتُعرّف كما يلي:

حيث من النوع و من النوع . ويمكننا أيضًا كتابة:

أما إلغاء التقييس (Uncurrying) فهو التحويل العكسي، ويمكن فهمه بسهولة من خلال مرافقه الأيمن، وهو الدالة .

نظرية المجموعات

في نظرية المجموعات، يُستخدم الترميز للدلالة على مجموعة الدوال من المجموعة إلى المجموعة . والتقييس هو تناظر تقابلي طبيعي بين المجموعة للدوال من إلى ، والمجموعة للدوال من إلى مجموعة الدوال من إلى . بالرموز:

في الواقع، فإن هذا التناظر الطبيعي هو ما يُبرّر الترميز الرياضي لمجموعة الدوال. وكما هو الحال في جميع أمثلة التقييس، تصف الصيغة أعلاه زوجًا مقترنًا من الدوال المرافقة: لكل مجموعة ثابتة ، يكون التابع هو المرافق الأيسر للتابع .

في تصنيف المجموعات، يُطلق على كائن رياضي اسم كائن أسي.

فضاءات الدوال

في نظرية فضاء دالي مثل تحليل دالي أو نظرية التجانس، غالبًا ما يهتم المرء بـدالة مستمرة بين فضاء طوبولوجي. يُكتب (أي دالة هوم) للدلالة على مجموعة "جميع" الدوال من إلى ، ويُستخدم الترميز للإشارة إلى الجزء الفرعي من الدوال المستمرة. هنا، تُعطى دالة وفق تقابل (دالة):

بينما تكون دالة uncurrying هي المعكوس لهذه الدالة. إذا أُعطيت المجموعة من الدوال المستمرة من إلى طوبولوجيا منفتحة مضغوطة، وكان الفضاء هاوسدورف موضعيًا مضغوط، فإن:

تكون تصاكل. ينطبق هذا أيضًا عندما تكون و و فضاءات مولدة بطريقة مضغوطة[17](chapter 5)[18]، على الرغم من وجود حالات أكثر.[19][20]

إحدى النتائج المفيدة هي أن الدالة تكون مستمرة إذا وفقط إذا كانت صورتها بطريقة curry مستمرة. نتيجة مهمة أخرى هي أن دالة "التطبيق"، والتي تُعرف عادةً باسم "التقييم" في هذا السياق، تكون مستمرة (لاحظ أن إيفال مفهوم مختلف تمامًا في علوم الحاسوب). أي أن:

هي دالة مستمرة عندما يكون بمنفتحة مضغوطة و هاوسدورف موضعيًا مضغوطًا.[21] هاتان النتيجتان أساسيتان في إثبات استمرارية تحاول، أي عندما يكون هو الفترة الواحدة ، بحيث يمكن اعتبار إما تحاول بين دالتين من إلى ، أو مسارًا مستمرًا في .

الطوبولوجيا الجبرية

في طوبولوجيا جبرية، تُعد currying مثالًا على تطابق إيكمان–هيلتون، ولذلك تلعب دورًا مهمًا في سياقات متنوعة. على سبيل المثال، فضاء العقد هو المرافق لتعليق مختزل، ويُكتب عادة:

حيث هي مجموعة تحاول بين الدوال ، و هو تعليق لـ"A"، و هو فضاء العقد لـ"A". من حيث الجوهر، يمكن اعتبار التعليق كحاصل الضرب الكارتيزي لـ مع الفترة الواحدة، مع معاملته بعلاقة تكافؤ لتحويل الفترة إلى حلقة. الصورة بواسطة curry تربط الفضاء إلى فضاء الدوال من الحلقات إلى ، أي من إلى .[21] وبالتالي، فإن هو دالة مرافق تربط التعليقات بفضاءات العقد، وuncurrying هو النظير لها.[21]

يمكن فهم الازدواجية بين مخروط التضمين وألياف التضمين (أي إدراج وإسقاط)[17](chapters 6,7) كشكل من أشكال curry، مما يؤدي بدوره إلى الازدواجية بين متتالية منضبطة ومتتاليات بوبي العكسية.

في الجبر التماثلي، تُعرف العلاقة بين curry وuncurry باسم مرافقة الجداء التنسوري والدالة هوم، حيث تظهر ظاهرة مثيرة للاهتمام: قد لا تُرفع دالة هوم ودالة جداء موتر إلى متتالية منضبطة؛ ما يؤدي إلى تعريف دالة إكست ودالة تور.

نظرية المجالات

في نظرية الترتيب، أي نظرية شبكة لمجموعة مرتبة جزئيًا، تكون دالة مستمرة عندما تُزود الشبكة بطوبولوجيا سكوت.[22] لقد دُرست الدوال المستمرة وفق سكوت في البداية كجزء من محاولة لإيجاد دلالات لـتكامل لامدا (نظرًا لعدم كفاية نظرية المجموعات العادية لذلك). بشكل أعم، تُدرس هذه الدوال في نظرية المجالات، التي تشمل دراسة الدلالات التصويرية لخوارزميات الحاسوب. لاحظ أن طوبولوجيا سكوت تختلف كثيرًا عن العديد من الطوبولوجيات الشائعة في فئة الفضاءات الطوبولوجية؛ فهي عادةً ما تكون أدق، وليست فضاء رصين.

حساب لامبدا

في علم الحاسوب النظري، يوفر الكرّيان وسيلة لدراسة الدوال متعددة الوسائط ضمن نماذج نظرية بسيطة جدًا، مثل حساب لامبدا، حيث تأخذ الدوال وسيطًا واحدًا فقط. لنفترض وجود دالة تأخذ وسيطين وتملك النوع ، مما يعني أن x يجب أن يكون من النوع ، وy من النوع ، بينما تُرجع الدالة نفسها قيمة من النوع . الشكل المُكرّى للدالة f يُعرّف على النحو التالي:

حيث هو معامل التجريد في حساب لامبدا. وبما أن الكرّيان يأخذ كمدخل دوال من النوع ، فإن نوع الكرّيان ذاته يُستنتج كالتالي:

عادةً ما يُعتبر معامل تجميعيًا إلى اليمين، لذلك يُكتب النوع غالبًا بصيغة مختصرة . وبالمقابل، فإن تطبيق الدالة يُعتبر تجميعيًا إلى اليسار، لذا فإن التعبير يعادل:

.

أي أن الأقواس ليست ضرورية لتوضيح ترتيب التطبيق.

يمكن استخدام الدوال المُكرّاة في أي لغة برمجة تدعم الإغلاق. ومع ذلك، غالبًا ما تُفضّل الدوال غير المُكرّاة لأسباب تتعلق بالكفاءة، إذ يمكن تجنب تكلفة التطبيق الجزئي وإنشاء الإغلاقات في معظم استدعاءات الدوال.

نظرية النمط

في نظرية النمط، يتم تنظيم الفكرة العامة لنظام الأنواع في علم الحاسوب ضمن جبر محدد للأنواع. فعلى سبيل المثال، عند كتابة ، فإن المقصود أن و هما أنواع، بينما السهم هو منشئ نوع، وبشكل خاص، يمثل نوع الدالة أو نوع السهم. وبالمثل، فإن حاصل الضرب الديكارتي للأنواع يُنشأ بواسطة منشئ نوع الضرب .

يُعبَّر عن هذا النهج النمطي في لغات برمجة مثل إم إل واللغات المتفرعة منها أو المتأثرة بها مثل كامل وهاسكل، وإف.

يوفّر النهج النمطي تكاملًا طبيعيًا مع لغة نظرية الفئات، كما سيُناقش لاحقًا. يعود ذلك إلى أن الفئات، وبشكل خاص الفئات الوحيدية، تمتلك لغة داخلية، ويُعد حساب لامبدا النمطي البسيط المثال الأبرز على مثل هذه اللغة. وتكمن أهميته في هذا السياق بقدرته على البناء انطلاقًا من منشئ نوع وحيد، هو نوع السهم. ويُضفي الكرّيان على اللغة نوع الضرب بشكل طبيعي. وتسمح المطابقة بين الكائنات في الفئات والأنواع بإعادة تفسير لغات البرمجة كأنظمة منطقية (عبر تطابق كاري-هوارد)، وكأنظمة رياضية أخرى، كما سيُستعرض لاحقًا.

المنطق

بموجب تطابق كاري-هوارد، فإن وجود الكرّيان واللاكرّيان يعادل النظريّة المنطقية (والمعروفة أيضًا باسم التصدير)، إذ إن النوع الضربي (بالإنجليزية: product type) يُقابل اقترانًا منطقيًا، ونوع الدالة يُقابل الاقتضاء.

في فئة جبر هايتنغ، يُكتب الكائن الأسي عادةً على شكل اقتضاء منطقي . وتُعد الجبرات التوزيعية من نوع هايتنغ جبور بولية، ويأخذ الكائن الأسي فيها الشكل الصريح ، مما يُبرز أن الكائن الأسي يُمثّل في الحقيقة الاقتضاء المادي. [23]

نظرية الفئات

تجد مفاهيم الكرّيان واللاكرّيان أوضح تعبيراتها العامة والمجردة في نظرية الفئات. يُعدّ الكرّيان خاصية شاملة للكائن الأسي (كائن أسي)، وينتج عنه اقتران في الفئات المغلقة الديكارتية. أي أن هناك تماكل طبيعي (تحويل طبيعي) بين التشاكلات من الجداء الثنائي والتشاكلات إلى كائن أسي .

ويُعمّم هذا على نتيجة أوسع في فئة مغلقة أحادية: يُمثّل الكرّيان القول إن الجداء التوتري (جداء الفئة الأحادية) والهوم الداخلي هما دوال مراعية مقترنة؛ أي أن لكل كائن يوجد تماثل طبيعي على النحو الآتي:

حيث يُشير "هوم" إلى الدالة المراعية (الخارجية) التي تجمع جميع التشاكلات في الفئة، في حين يُمثل الهوم الداخلي في الفئة المغلقة الأحادية. في فئة المجموعات، يتطابق الاثنان. وعندما يكون الجداء هو الجداء الديكارتي، يصبح الهوم الداخلي هو الكائن الأسي .

قد يفشل الكرّيان في حالتين. الأولى، إذا لم تكن الفئة مغلقة، وبالتالي تفتقر إلى دالة هوم داخلية (ربما لوجود أكثر من خيار ممكن لهذه الدالة). والثانية، إذا لم تكن أحادية، أي أنها تفتقر إلى جداء (أي لا يوجد بها طريقة لتكوين أزواج من الكائنات). الفئات التي تمتلك كلاً من الجداءات والهومات الداخلية هي بالضبط الفئات المغلقة الأحادية.

يُعد إطار الفئات المغلقة الديكارتية كافيًا لمناقشة المنطق الكلاسيكي؛ أما الإطار العام للفئات المغلقة الأحادية فهو مناسب لـ الحوسبة الكمومية.[24]

يكمن الفرق بين هذين الإطارين في أن الجداء في الفئات الديكارتية (مثل فئة المجموعات، أو رتب جزئية تامة، أو جبور هايتنغ) هو ببساطة جداء ديكارتي؛ ويُفسَّر على أنه زوج مرتب من العناصر (أو قائمة). ويُعد حساب لامبدا النمطي البسيط هو اللغة الداخلية للفئات المغلقة الديكارتية؛ ولهذا السبب تُعد الأزواج والقوائم هي نظام الأنواع الأساسي في نظرية النمط لكل من ليسب وسكيم (لغة برمجة) والعديد من لغات البرمجة الوظيفية.

وعلى النقيض، فإن الجداء في الفئات الأحادية (مثل فضاء هيلبرت أو الفضاءات المتجهية في التحليل الدالي) هو جداء موتر. وتُعد المنطق الخطي هو اللغة الداخلية لهذه الفئات، وهي أحد أشكال المنطق الكمومي؛ ويُقابلها نظام الأنواع الخطي. تُستخدم هذه الفئات في توصيف التشابك الكمومي، كما تسمح — على نحو أوسع — بتعميم واسع لـ تطابق كاري-هوارد إلى ميكانيكا الكم، والمتعددات الحدية في الطوبولوجيا الجبرية، ونظرية الأوتار.[3]

التمايز عن التطبيق الجزئي للدوال

غالبًا ما يُخلط بين الكرّية (Currying) والتطبيق الجزئي للدوال (Partial Function Application).[1][2] من الفروقات الجوهرية بينهما أن استدعاء دالة مطبَّقة جزئيًا يُرجع النتيجة مباشرة، وليس دالة أخرى في سلسلة الكرّية؛ ويمكن توضيح هذا الفرق بسهولة أكبر عند التعامل مع دوال ذات عدد كبير من الوسيطات (أي الأريتي > 2).[25]

على سبيل المثال، إذا كانت لدينا دالة من النمط ، فإن كرّية هذه الدالة تُنتج دالة بالشكل . أي أن استدعاء الدالة الأصلية قد يكون بالشكل ، بينما يُستدعى الشكل الكرّي منها بـ ، حيث يُمرر كل وسيط بشكل تسلسلي إلى دالة أحادية تُرجع دالة أخرى حتى الوصول للنتيجة النهائية. لاحظ أنه بعد استدعاء نحصل على دالة تقبل وسيطًا واحدًا وتُرجع دالة أخرى، وليس دالة تقبل وسيطين.

في المقابل، يشير "التطبيق الجزئي للدوال" إلى عملية تثبيت عدد من الوسيطات في دالة، وإنتاج دالة جديدة بعدد وسائط أقل. إذا أخذنا نفس الدالة السابقة، و"ثبّتنا" الوسيط الأول، نحصل على دالة من الشكل . يمكن استدعاؤها بالشكل . أي أن النتيجة في هذه الحالة هي دالة تقبل وسيطين، وليس سلسلة من الدوال الأحادية.

من حيث الفهم الحدسي، يمكن القول إن التطبيق الجزئي يعني: "إذا ثبّتت أول وسيط في دالة، ستحصل على دالة تقبل باقي الوسائط". على سبيل المثال، إذا كانت الدالة div تمثل عملية القسمة x ÷ y، فإن تثبيت x عند 1 (أي div 1) ينتج دالة مساوية للدالة inv التي تُرجع مقلوب الوسيط، أي: inv(y) = 1 ÷ y.

الدافع العملي للتطبيق الجزئي هو أن الدوال الناتجة عن تزويد بعض، وليس كل، الوسائط تكون غالبًا مفيدة؛ على سبيل المثال، العديد من اللغات توفر دوال مثل plus\_one، والتي يمكن إنشاؤها بسهولة عن طريق تثبيت الوسيط الأول لدالة الجمع عند 1.

يمكن اعتبار التطبيق الجزئي بمثابة تقييم لدالة كرّية عند نقطة معينة. مثلًا، إذا كانت و ، فإن: أو ببساطة: حيث تمثل كرّية الوسيط الأول للدالة f.

وبالتالي، فإن التطبيق الجزئي ما هو إلا دالة كرّية تم تقييمها عند نقطة معينة. وبالمثل، فإن أي دالة كرّية عند نقطة معينة تُعد تطبيقًا جزئيًا. ولمزيد من الإثبات، يمكن القول إنه إذا كانت لدينا دالة ، فيمكننا تعريف دالة بحيث ؛ مما يدل على أن أي تطبيق جزئي يمكن اختزاله إلى عملية كرّية واحدة.

من هنا، يمكن تعريف التطبيق الجزئي على أنه الناتج الفعلي لتطبيق واحد لعملية الكرّية على ترتيب معين لوسائط دالة معينة.

انظر أيضًا

المراجع

  1. 1 2 3 cdiggins (24 مايو 2007). "Currying != Generalized Partial Application?!". Lambda the Ultimate: The Programming Languages Weblog. مؤرشف من الأصل في 2024-12-09.
  2. 1 2 3 [(https://www.uncarved.com/articles/not-currying/) "Partial Function Application is not Currying"]. The Uncarved Block. 7 أغسطس 2020. [(https://web.archive.org/web/20161023205431/http://www.uncarved.com/articles/not_currying) مؤرشف] من الأصل في 2016-10-23. {{استشهاد ويب}}: تحقق من قيمة |مسار أرشيف= (مساعدة) وتحقق من قيمة |مسار= (مساعدة)
  3. 1 2 Baez، John C.؛ Stay، Mike (6 يونيو 2009). "Physics, Topology, Logic and Computation: A Rosetta Stone". في Coecke، Bob (المحرر). New Structures for Physics (PDF). Lecture Notes in Physics. برلين، هايدلبرغ: Springer (نُشِر في 5 يوليو 2010). ج. 813: New Structures for Physics. ص. 95–172. arXiv:0903.0340. DOI:10.1007/978-3-642-12821-9_2. ISBN:978-3-642-12821-9. S2CID:115169297. مؤرشف من الأصل (PDF) في 2022-12-05.
  4. 1 2 Frege, Gottlob (1893). "§ 36". Grundgesetze der arithmetik (بالألمانية). Book from the collections of University of Wisconsin - Madison, digitized by Google on 26 August 2008. يينا: Hermann Pohle. pp. 54–55.
  5. 1 2 3 Quine، W. V. (1967). "Introduction to Moses Schönfinkel's 1924 "On the building blocks of mathematical logic"". في van Heijenoort، Jean (المحرر). From Frege to Gödel: A Source Book in Mathematical Logic, 1879-1931. Harvard University Press. ص. 355–357. ISBN:9780674324497.
  6. Schönfinkel، Moses (سبتمبر 1924) [تم تقديمه في جمعية الرياضيات في غوتينغن بتاريخ 7 ديسمبر 1920. واستلمته مجلة حوليات الرياضيات في 15 مارس 1924.]. كتب في موسكو. "Über die Bausteine der mathematischen Logik" [حول اللبنات الأساسية للمنطق الرياضي] (PDF). حوليات الرياضيات (مجلة ألمانية). برلين؟: سبرنغر. ج. 92 ع. 3–4: 305–316. DOI:10.1007/BF01448013. S2CID:118507515. مؤرشف من الأصل (PDF) في 2024-05-15.
  7. 1 2 Strachey, Christopher (Apr 2000) [هذا البحث كان مضمون سلسلة محاضرات قُدّمت في المدرسة الصيفية الدولية لبرمجة الحاسوب في كوبنهاغن، أغسطس 1967.]. "المفاهيم الأساسية في لغات البرمجة". Higher-Order and Symbolic Computation (بالإنجليزية). 13: 11–49. CiteSeerX:10.1.1.332.3161. DOI:10.1023/A:1010000313106. ISSN:1573-0557. S2CID:14124601. ابتكر شونفينكل تقنية لتحويل العمليات التي تقبل عدة وسائط إلى سلسلة من العمليات التي تقبل وسيطًا واحدًا فقط.
  8. 1 2 3 نُشر أولًا في Reynolds, John C. (1 Aug 1972). "Definitional interpreters for higher-order programming languages". In Shields, Rosemary (ed.). Proceedings of the ACM annual conference - ACM '72 (بالإنجليزية). ACM Press. Vol. 2. pp. 717–740. DOI:10.1145/800194.805852. ISBN:9781450374927. S2CID:163294. Archived from the original on 2024-07-07. في السطر الأخير استخدمنا خدعة تُعرف بالتحوير الكاري (سُميت بذلك نسبة إلى المنطقي هاسكل كاري) لحل مشكلة إدخال عملية ثنائية في لغة لا تقبل إلا وسيطًا واحدًا لكل دالة. (علّق المُراجع بأن "التحوير الكاري" أكثر طرافة، لكن "شونفينكلينغ" أدق.) نُشرت لاحقًا في Reynolds، John C. (1998). "Definitional Interpreters for Higher-Order Programming Languages". Higher-Order and Symbolic Computation. بوسطن: Kluwer Academic Publishers. ج. 11 ع. 4: 363–397. DOI:10.1023/A:1010027404223. 13. مؤرشف من الأصل في 2025-01-26.
  9. Slonneger، Kenneth؛ Kurtz، Barry L. (1995). "الدوال المحوّرة، 5.1: مفاهيم وأمثلة، الفصل الخامس: حساب لامبدا". Formal Syntax and Semantics of Programming Languages: A Laboratory Based Approach (PDF). Addison-Wesley Publishing Company. ص. 144. ISBN:0-201-65697-3. مؤرشف من الأصل (PDF) في 2025-01-09.
  10. 1 2 3 Curry، Haskell B. (1980). Barwise، Jon؛ Keisler، H. Jerome؛ Kunen، Kenneth (المحررون). "Some Philosophical Aspects of Combinatory Logic". The Kleene Symposium: Proceedings of the Symposium Held June 18-24, 1978 at Madison, Wisconsin, U.S.A. (Studies in Logic and the Foundations of Mathematics). Studies in Logic and the Foundations of Mathematics. North-Holland Publishing Company, imprint of Elsevier. ج. 101: 85–101. DOI:10.1016/S0049-237X(08)71254-0. ISBN:9780444853455. ISSN:0049-237X. S2CID:117179133. Some contemporary logicians call this way of looking at a function "currying", because I made extensive use of it; but Schönfinkel had the idea some 6 years before I did.
  11. "التحوير الكاري وشونفينكل". ويكي مستودع أنماط بورتلاند. Cunningham & Cunningham, Inc. 6 مايو 2012. مؤرشف من الأصل في 2024-12-09.
  12. Barendregt، Henk؛ Barendsen، Erik (مارس 2000) [ديسمبر 1998]. Introduction to Lambda Calculus (PDF) (ط. منقحة). ص. 8. مؤرشف من الأصل (PDF) في 2025-02-07.
  13. Curry، Haskell؛ Feys، Robert (1958). Combinatory logic (ط. 2). أمستردام، هولندا: North-Holland Publishing Company. ج. I.
  14. Hutton، Graham؛ Jones، Mark P.، المحررون (نوفمبر 2002). "Frequently Asked Questions for comp.lang.functional, 3. Technical topics, 3.2. Currying". University of Nottingham Computer Science. مؤرشف من الأصل في 2015-08-25.
  15. Heim, Irene; Kratzer, Angelika (2 Jan 1998). Semantics in Generative Grammar (PDF) (بالإنجليزية). Malden, Massachusetts: Blackwell Publishers, an imprint of Wiley. ISBN:0-631-19712-5. Archived from the original (PDF) on 2024-09-10.{{استشهاد بكتاب}}: صيانة الاستشهاد: التاريخ والسنة (link)
  16. Turner، David (1 يونيو 1997). "Programming language, Currying, or Schonfinkeling?, #9 / 14". Computer Programming Language Forum. مؤرشف من الأصل في 2022-03-03. اطلع عليه بتاريخ 2022-03-03.
  17. 1 2 May، Jon Peter (1999). A concise course in algebraic topology (PDF). Chicago lectures in mathematics. Chicago, Ill.: University of Chicago Press. ص. 39–55. ISBN:0-226-51183-9. OCLC:41266205. مؤرشف من الأصل (PDF) في 2025-03-27.
  18. "compactly generated topological space". nLab. 28 مايو 2023. مؤرشف من الأصل في 2025-03-11.
  19. Tillotson، J.؛ Booth، Peter I. (مارس 1980) [Received 2 October 1978, revised 29 June 1979, published 1 May 1980]. كتب في Memorial University of Newfoundland. "Monoidal closed, Cartesian closed and convenient categories of topological spaces" (PDF). Pacific Journal of Mathematics. Berkeley, California: Mathematical Sciences Publishers. ج. 88 ع. 1: 35–53. DOI:10.2140/pjm.1980.88.35. eISSN:1945-5844. ISSN:0030-8730. مؤرشف من الأصل (PDF) في 2024-10-06.
  20. "convenient category of topological spaces". nLab. 11 أغسطس 2023. مؤرشف من الأصل في 2025-04-03.
  21. 1 2 3 Rotman، Joseph Jonah (1988). "Chapter 11". An introduction to algebraic topology. Graduate texts in mathematics; 119. New York: Springer-Verlag. ISBN:978-0-387-96678-6. OCLC:17383909. مؤرشف من الأصل في 2025-04-01.
  22. Barendregt، Hendrik Pieter (1984). "Theorems 1.2.13, 1.2.14". The lambda calculus: its syntax and semantics. Studies in logic and the foundations of mathematics (ط. منقحة). North-Holland, an imprint of Elsevier. ج. 103. ISBN:978-0-444-87508-2.
  23. Mac Lane, Saunders; Moerdijk, Ieke (1992). "الفصل الأول: فئات المرافقين؛ الأقسام 7. حساب القضايا، 8. جبور هايتنغ، و9. الكمونات كاقترانات". Sheaves in Geometry and Logic: A First Introduction to Topos Theory (بالإنجليزية). نيويورك: Springer-Verlag، جزء من Springer Science & Business Media. pp. 48–57. ISBN:978-0-387-97710-2.
  24. Abramsky, Samson; Coecke, Bob (5 Mar 2007). "A categorical semantics of quantum protocols". Logic in Computer Science (LICS 2004): Proceedings, 19th Annual IEEE Symposium, Turku, Finland, 2004 (بالإنجليزية). IEEE Computer Society Press. pp. 415–425. arXiv:quant-ph/0402130. DOI:10.1109/LICS.2004.1319636. ISBN:978-0-7695-2192-3.
  25. Lee، G. Kay (15 مايو 2013). [(http://slid.es/gsklee/functional-programming-in-5-minutes) "Functional Programming in 5 Minutes"]. Slides. {{استشهاد ويب}}: تحقق من قيمة |مسار= (مساعدة)

وصلات خارجية