OCaml là dòng ngôn ngữ lập trình phổ dụng trong ngôn ngữ Caml (một dạng của ngôn ngữ lập trình ML), bắt đầu được Viện Nghiên cứu Khoa học Máy tính Quốc gia ở Pháp (INRIA) phát triển từ năm 1985. Caml là ngôn ngữ lập trình hàm và đến OCaml thì thêm các tính năng lập trình hướng đối tượng (Object - chữ O trong OCaml).
Đặc điểm
- Kiểu mạnh: các biến trong Caml khi khởi tạo chỉ mang một dạng dữ liệu nhất định (khác với các ngôn ngữ kiểu yếu như Lisp).
- Hệ thống gỡ lỗi.
Kiểu dữ liệu
Trong OCaml, kiểu số nguyên và số thực có các toán tử riêng biệt:
- Với số nguyên: +, *,...
- Với số thực: +., *.,...
Kiểu chuỗi ký tự được bao trong cặp dấu nháy kép: "Viet Nam"
Kiểu boolean có hai giá trị true
và false
.
Kiểu danh sách (list
) bao giữa cặp ngoặc vuông với các thành phần phân cách nhau bởi dấu chấm phẩy.
[2; 3; 65; -4]
Câu lệnh
Câu lệnh của OCaml kết thúc với hai dấu chấm phẩy (;;), khác với ML chuẩn.
Trong OCaml, cũng như các ngôn ngữ lập trình hàm khác, tên được gán giá trị bằng lệnh let
:
let x = 3 + 5 * 2;;
Đặc điểm lập trình hàm của OCaml cho phép các hàm là dạng dữ liệu cấp I. Hàm số ưu tiên kết hợp với tham số ở mức ưu tiên cao nhất.
(* Chú thích: giả sử f là một hàm có một tham số *)
2 + f 3 (* cách thông dụng *)
2 + (f 3) (* rõ ràng hơn *)
2 + f(3) (* thường dùng với các ngôn ngữ mệnh lệnh như C, Pascal... Không thông dụng trong OCaml *)
Với đặc điểm này, một tên cũng có thể khai báo như một hàm bằng let
:
let gapDoi x = x *. 2.0;;
Với các hàm đệ quy, ta cần viết let rec
:
let rec giaiThua n =
if n = 0 then 1 else n * giaiThua (n-1);;
Hiện thực
Hệ thống Objective Caml được phát triển gồm có một bộ biên dịch (ocamlopt) theo mã gốc (native code) trên nhiều hệ vi xử lý (i386, IA64, Power PC, v.v...); cùng với bộ biên dịch bytecode (ocamlc). Ngoài ra, còn có các công cụ hỗ trợ như: môi trường dòng lệnh (ocaml), gỡ lỗi (ocamldebug), v.v...
OCaml được phân phối dưới dạng mã nguồn cùng các bản nhị phân trên các hệ điều thành thông dụng (Windows, Mac OS X, Linux (gói deb và rpm).
Dấu nhắc lệnh
ocaml cũng là tên trình thông dịch của ngôn ngữ. Dấu nhắc lệnh OCaml có hình dấu thăng (#). Cần nhớ rằng để kết thúc dòng lệnh cần gõ ;;
trước khi gõ Enter.
# 1+2*3;;
-: int = 7
Kết quả phép tính có giá trị bằng 7, kể cả kiểu dữ liệu: số nguyên (int
) cũng được máy thông báo.
# let pi = 4.0 *. atan 1.0;;
val pi: float = 3.14159265358979312
# let binhPhuong x = x *. x;;
val binhPhuong: float -> float =
Kết quả của một khai báo sẽ được máy thông báo là val
tên. Trong trường hợp hàm số thì có cả thông báo về các kiểu dữ liệu (ở đây hàm nhận tham số dạng float
(số thực) và trả kết quả cũng dưới dạng float
.
Ứng dụng
OCaml có một số ứng dụng trong kĩ thuật, công nghiệp, thương nghiệp:
- Được công ty Jane Street Capital [http://www.janestreet.com/] sử dụng rộng rãi
- Phần mềm Unison
- Phần mềm chứng minh định lý có tên là Coq.
- MLdonkey, phần mềm dạng BitTorrent.
- FFTW: chương trình tính biến đổi Fourier nhanh nhất phương Tây.
👁️
4 | 🔗 | 💖 | ✨ | 🌍 | ⌚
**OCaml** là dòng ngôn ngữ lập trình phổ dụng trong ngôn ngữ **Caml** (một dạng của ngôn ngữ lập trình ML), bắt đầu được Viện Nghiên cứu Khoa học Máy tính Quốc gia ở Pháp
thumb|Minh họa mã nguồn [[Java (programming language)|Java với comment **mở đầu** được biểu thị bằng màu **đỏ** và comment **nội dòng** bằng màu **lục**. **Mã chương trình** là bằng màu **lam**.]]Trong lập
Một **biến chưa khai báo** (tiếng Anh: **undefined variable**) trong mã nguồn của một chương trình máy tính là một biến được sử dụng trong mã nguồn nhưng chưa được chương trình khai báo trước
**Lập trình hướng đối tượng** () là một mẫu hình lập trình dựa trên khái niệm "đối tượng", mà trong đó, đối tượng chứa đựng các dữ liệu trong các trường, thường được gọi là
Trong các lĩnh vực an ninh máy tính và lập trình, một **lỗi tràn bộ nhớ đệm** hay gọi tắt là **lỗi tràn bộ đệm** (tiếng Anh: _buffer overflow_) là một lỗi lập trình có
**MLDonkey** là một trình khách của mạng đồng đẳng có mã nguồn mở, cho phép tải tệp từ nhiều nguồn cung cấp khác nhau. MLDonkey còn được gọi dưới một tên khác là mạng đồng
**MediaWiki** là phần mềm wiki tự do nguồn mở được phát hành dưới Giấy phép Công cộng GNU (GPL). Nó được sử dụng trên Wikipedia và gần như tất cả các trang web Wikimedia khác,
**Văn phạm liên kết** (VPLK) là một lý thuyết về cú pháp của Davy Temperley và Daniel Sleator mà xây dựng mối quan hệ giữa các cặp từ thay vì các cấu thành trong một
Trong khoa học máy tính, **thuật toán tất định** là một thuật toán có đầu ra (output) hoàn toàn có thể dự đoán được (xác định được) qua đầu vào (input), và máy chạy thuật
**Ngôn ngữ biên dịch** (tiếng Anh: _compiled language_) là ngôn ngữ lập trình có triển khai thường là trình biên dịch (bộ dịch tạo ra mã máy từ mã nguồn), chứ không phải trình thông
Đây là danh sách các ngôn ngữ lập trình đáng chú ý, được nhóm theo loại. Vì không có sơ đồ phân loại bao quát cho các ngôn ngữ lập trình, nên trong nhiều trường
Trong khoa học máy tính, đặc biệt là trong biểu diễn tri thức và siêu logic học, lĩnh vực **suy luận tự động** (automated reasoning) được dành riêng cho việc hiểu các khía cạnh khác
Trong lập trình máy tính, **tham chiếu yếu** (tiếng Anh: _weak reference_) là một tham chiếu mà không bảo vệ đối tượng được tham chiếu khỏi sự thu gom bởi một bộ gom rác, không
**Suy luận kiểu** (tiếng Anh: _type inference_) dùng để chỉ việc tự động phát hiện kiểu dữ liệu của một biểu thức trong ngôn ngữ lập trình. Nó là một tính năng hiện diện trong
**Định dạng dấu phẩy động độ chính xác đơn** (đôi khi còn gọi là **FP32** hoặc **float32**) là một định dạng số máy tính, thường chiếm 32 bit trong bộ nhớ máy tính; nó có
Một số ngôn ngữ lập trình cung cấp **kiểu dữ liệu phức** để lưu và thực hiện các phép toán số học số phức dưới dạng một kiểu dữ liệu có sẵn (cơ bản). Trong
Trong phần mềm máy tính, **lập trình đa năng** (tiếng Anh: **general-purpose programming language**) là ngôn ngữ lập trình được thiết kế để sử dụng cho việc Các ngôn ngữ lập trình ban đầu được
nhỏ| Đoạn mã từ một mô-đun [[hạt nhân Linux, sử dụng quy tắc con rắn cho tên biến. ]] **Quy tắc con rắn** (, còn được viết cách điệu là **snake_case**) là một cách viết