كاميل
كاميل (اختصار لـ Categorical Abstract Machine Language ) هي لغة برمجة وظيفية متعددة الأنماط ، متعددة الأغراض ، عالية المستوى ، وهي لهجة من عائلة لغات البرمجة ML . طُوّرت كاميل في فرنسا في المعهد الفرنسي لأبحاث علوم الحاسوب والأتمتة (INRIA) والمدرسة العليا للأساتذة (باريس) (ENS).
لغة كامل ذات كتابة ثابتة ، وتقييم صارم ، وتستخدم إدارة تلقائية للذاكرة . أما لغة أو كامل ، وهي الوريث الرئيسي للغة كامل، فتضيف العديد من الميزات إلى اللغة، بما في ذلك طبقة البرمجة الكائنية (object).
أمثلة
فيما يلي، #يمثل موجه أوامر لغة كامل.
مرحبا بالعالم
برنامج "مرحباً بالعالم!" هو:
print_endline "مرحباً بالعالم!" ;;دالة المضروب (الاستدعاء الذاتي والبرمجة الوظيفية البحتة)
تُعدّ العديد من الدوال الرياضية، مثل دالة المضروب، أكثر ملاءمةً للتمثيل بصيغة وظيفية بحتة. فيما يلي دالة كامل تكرارية وظيفية بحتة تُنفّذ عملية حساب المضروب:
let rec fact n = if n = 0 then 1 else n * fact ( n - 1 );;يمكن كتابة الدالة بشكل مكافئ باستخدام مطابقة الأنماط :
let rec fact = function | 0 -> 1 | n -> n * fact ( n - 1 );;هذا الشكل الأخير هو التعريف الرياضي للمضروب كعلاقة تكرارية.
لاحظ أن المترجم استنتج نوع هذه الدالة على أنها عدد صحيح ، مما يعني أن هذه الدالة تربط الأعداد الصحيحة ببعضها. على سبيل المثال، 12! هو:int->int
# حقيقة 12 ;; - : int = 479001600المشتقة العددية (الدوال ذات الرتبة الأعلى)
بما أن لغة كامل هي لغة برمجة وظيفية ، فمن السهل إنشاء الدوال وتمريرها في برامج كامل. لهذه الميزة تطبيقات عديدة، منها حساب المشتقة العددية لدالة ما. تقوم دالة كامل التالية dبحساب المشتقة العددية لدالة معينة fعند نقطة معينة x:
let d delta f x = ( f ( x +. delta ) -. f ( x -. delta )) /. ( 2 . *. delta );;تتطلب هذه الدالة قيمة صغيرة . يُعد الجذر التكعيبيdelta لقيمة إبسيلون خيارًا جيدًا لقيمة دلتا .
يشير نوع الدالة dإلى أنها تربط floatدالة أخرى من نفس النوع . وهذا يسمح لنا بتطبيق الوسائط جزئيًا. يُعرف هذا الأسلوب الوظيفي باسم "التقسيم الجزئي" . في هذه الحالة، من المفيد تطبيق الوسيط الأول جزئيًا على الدالة الأولى للحصول على دالة أكثر تخصصًا.(float->float)->float->floatdeltad
# let d = d ( sqrt epsilon_float );; val d : ( float -> float ) -> float -> float = < fun >لاحظ أن النوع المُستنتج يشير إلى أن الاستبدال dيتوقع دالة يكون نوعها هو وسيطها الأول. يمكننا حساب تقريب عددي لمشتقةfloat->floatفيمع:
# d ( fun x -> x *. x *. x -. x -. 1 .) 3 .;; - : float = 26 .الإجابة الصحيحة هي.
dتُسمى هذه الدالة " دالة من الرتبة العليا " لأنها تقبل دالة أخرى ( f) كمعامل. ويمكننا، بالاستمرار، إنشاء المشتقة (التقريبية) للدالة f، بتطبيقها dمع حذف المعامل x:
# let f' = d ( fun x -> x *. x *. x -. x -. 1 .) ;; val f' : float -> float = < fun >تُعدّ مفاهيم الدوال المُعدّلة والدوال ذات الرتبة العليا مفيدةً للغاية في البرامج الرياضية. وتنطبق هذه المفاهيم أيضاً على معظم أنواع البرمجة الأخرى، ويمكن استخدامها لتحليل الشيفرة البرمجية بشكلٍ أكثر فعالية، مما يُؤدي إلى برامج أقصر وأخطاء أقل.
تحويل المويجات المنفصلة (مطابقة الأنماط)
يمكن تنفيذ تحويل موجة هار أحادي البعد لقائمة أرقام بطول قوة اثنين بشكل موجز للغاية في لغة Caml، وهو مثال ممتاز على استخدام مطابقة الأنماط على القوائم، حيث يتم أخذ أزواج من العناصر ( و ) من البداية وتخزين مجاميعها وفروقها في القوائم و على التوالي:h1h2sd
# let haar l = let rec aux l s d = match l , s , d with [ s ], [] , d -> s :: d | [] , s , d -> aux s [] d | h1 :: h2 :: t , s , d -> aux t ( h1 + h2 :: s ) ( h1 - h2 :: d ) | _ -> invalid_arg "haar" in aux l [] [] ;; val haar : int list -> int list = < fun >على سبيل المثال:
# هار [ 1 ; 2 ; 3 ; 4 ; - 4 ؛ - 3 ؛ - 2 ؛ - 1 ]؛؛ - : قائمة العمليات = [ 0 ; 20 ؛ 4 ; 4 ; - 1 ؛ - 1 ؛ - 1 ؛ - 1 ]تتيح مطابقة الأنماط تمثيل التحويلات المعقدة بوضوح وإيجاز. علاوة على ذلك، يحوّل مُصرّف لغة كامل مطابقة الأنماط إلى شفرة برمجية عالية الكفاءة، مما ينتج عنه أحيانًا برامج أقصر وأسرع من الشفرة المكافئة المكتوبة باستخدام عبارة case (Cardelli 1984، ص 210).
تاريخ
تمت كتابة أول تطبيق لـ Caml بلغة Lisp بواسطة أسكاندر سواريز في عام 1987 في المعهد الفرنسي لأبحاث علوم الحاسوب والأتمتة (INRIA). [ 2 ]
تم تنفيذ النسخة اللاحقة، Caml Light ، بلغة C بواسطة كزافييه ليروي وداميان دوليجيز ، [ 2 ] وقد أطلق على النسخة الأصلية لقب "Heavy Caml" بسبب متطلباتها العالية من الذاكرة ووحدة المعالجة المركزية. [ 2 ]
كانت لغة Caml Special Light إعادة كتابة كاملة أخرى أضافت نظام وحدات قويًا إلى اللغة الأساسية. وقد تم تعزيزها بطبقة برمجة كائنية التوجه (object) لتصبح Objective Caml ، والتي أعيد تسميتها لاحقًا إلى OCaml .
انظر أيضاً
مراجع
- ↑ "أحدث إصدار من كاميل لايت" . تم الاطلاع عليه بتاريخ 22 فبراير 2020 .
- 1 2 3 "تاريخ كاميل" ، inria.fr
فهرس
- النهج الوظيفي للبرمجة باستخدام Caml مؤرشف في 24-12-2007 على Wayback Machine بواسطة Guy Cousineau و Michel Mauny.
- كارديلي، لوكا (1984). تجميع لغة وظيفية ، ندوة ACM حول LISP والبرمجة الوظيفية ، رابطة آلات الحاسوب.
روابط خارجية
- الموقع الرسمي ، INRIA
- الاختراعات الفرنسية
- اللغات الوظيفية
- لغات البرمجة عالية المستوى
- عائلة لغات البرمجة ML
- لغات البرمجة
- لغات البرمجة التي تم إنشاؤها عام 1985
