چگونه 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

نتیجه این است که برای بررسی اینکه همه‌ی عددهای یک فهرست کمتر از ۱۰ هستند، با ماژول 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 پیدا نکنید.