كيف تتعلم OCaml

نظرة عامة على كيفية البدء من الصفر مع OCaml


يوفّر Exercism تمارين وتغذية راجعة، لكن قد يصعب على من يتعلّم OCaml لأول مرة أن يبدأ فيه مباشرة. تساعدك هذه المصادر على الانطلاق:

توثيق OCaml موزّع على عدة مشاريع، وقد يصعب العثور عليه لأن هناك ما يُسمّى أحيانًا المكتبة القياسية (المكتبة البسيطة نسبيًا التي تأتي مع المترجم)، وهناك مكتبة Core (مشروع منفصل من Jane Street يهدف إلى توفير مكتبة قياسية أكثر اكتمالًا واتساقًا).

والمربك أن المكتبة القياسية يُشار إليها أحيانًا باسم المكتبة الأساسية (وإن كان نادرًا ما تُسمى مكتبة Core).

تحتاج بعض التمارين إلى مكتبة Core من Jane Street، لكنها قد تفيدك في جميعها. وهي مقسّمة إلى ثلاث: Base وCore_kernel وCore، وكل واحدة توسّع التي قبلها. يكفيك Base في معظم التمارين، لكن بعضها، مثل التمارين التي تستخدم التواريخ، يحتاج إلى Core_kernel. لاستخدام Core، ضع open Base أو open Core_kernel في أعلى الكود.

على سبيل المثال، بدلًا من List ستحصل على نسخة من Base تحجب الأصل.(https://ocaml.janestreet.com/ocaml-core/latest/doc/base/Base/List/) (ويجعل open Base هذه النسخة متاحة بالاسم List).

توجد بعض الفروق الدقيقة وغير الدقيقة بين وحدة List في المكتبة القياسية ووحدة List في Core، فمثلًا توقيع List.for_all في المكتبة القياسية هو

val for_all : ('a -> bool) -> 'a list -> bool

أما في مكتبة Core فالتوقيع هو

val for_all : 'a t -> f:('a -> bool) -> bool

والنتيجة أنه للتحقق من أن جميع الأعداد في مصفوفة أقل من 10، عليك أن تكتب ما يلي مع وحدة List في المكتبة القياسية التي تأتي مع المترجم:

List.for_all (fun x -> x < 10) list

ومع وحدة List في Core عليك أن تكتب:

List.for_all list (fun x -> x < 10)

أو (وهو الأفضل):

List.for_all ~f:(fun x -> x < 10) list

نصيحة: ركّز على مكتبة Core وتجاهل المكتبة القياسية إلا إذا لم تجد فعلًا ما تحتاجه في Core.