VanVo (Văn Vở) là ngôn ngữ lập trình được thiết kế với cú pháp thuần Việt, nhưng không chỉ đơn giản là dịch lại một cách gượng gạo từ các ngôn ngữ khác, mình cố gắng để thiết kế một ngôn ngữ sao cho các câu lệnh trông tự nhiên như tiếng Việt nhất có thể, thuận tiện cho người Việt nhất có thể. Điển hình là bạn có thể đặt tên định danh có khoảng trắng như số nguyên tố
.
Ngôn ngữ sẽ có hơi thiên hướng toán học, những bạn học toán có thể sẽ cảm thấy quen thuộc hơn, vì mình định hướng ngôn ngữ được sử dụng như một CAS (Computer Algebra System). Tuy nhiên VanVo vẫn có thể dùng như một ngôn ngữ đa mục đích (General-purpose language) thông thường.
- Hỗ trợ những câu lệnh rẽ nhánh, cấu trúc lặp, cấu trúc dữ liệu và phép toán cơ bản.
- Hỗ trợ phân số và số phức.
- Có thể đặt tên định danh có khoảng trắng như
số nguyên tố
. - Không cần
;
ở cuối mỗi câu lệnh, và các khối lệnh sẽ được xác định bởi mức thụt dòng (indent level) như Python. - Phép nhân giữa hằng số, biến và mở ngoặc có thể lược bỏ, ví dụ
2x(x-1)
sẽ tương đương với2*x*(x-1)
. - List comprehension như
{ n*m | n thuộc [1..10], m thuộc [1..10], n != m }
- Lazy evaluation.
- Các thao tác và phép toán trên tập hợp như hội, giao, hiệu, tích Descartes.
- Gạch chân chính xác vị trí có lỗi khi chạy chương trình.
Nếu bạn đã tải Go thì cách đơn giản nhất để cài đặt là clone và build trực tiếp từ source như sau
git clone https://github.com/balldk/vanvo
cd vanvo
go install .
Ngoài ra bạn có thể tải file thực thi tại đây Releases v0.1.0.
Cài đặt language support: Để ngôn ngữ có syntax highlight và snippets trên VSCode thì bạn hãy qua đây cài thêm extension nhé: github.com/balldk/vscode-vanvo.
Để chạy chương trình ta dùng lệnh
vanvo program.vv
Trong đó program.vv
là file chứa nội dung code. Nói chung file extension của VanVo là .vv
.
Ví dụ 1: Xét tính chia hết của n cho 2 và 3, với n là các số nguyên trong khoảng
cho A = [1..100]
với mỗi n thuộc A:
nếu n % 2 == 0:
xuất n, "chia hết cho 2"
còn nếu n % 3 == 0:
xuất n, "chia hết cho 3"
còn không:
xuất n, "không chia hết cho cả 2 và 3"
Ví dụ 2: Tính giá trị của hàm hợp, với
cho f(x) = 2x(x^2 - 2x)(3x - 5)
cho g(x) = 5x
cho a = 5
xuất f.g(a)
2x(x^2 - 2x)(3x - 5)
là cách viết ngắn gọn hơn của 2*x*(x^2 - 2*x)*(3*x - 5)
.
Ví dụ 3: Sử dụng list comprehension để định nghĩa mảng vô hạn các phần tử, với fib[i]
là phần tử thứ i
trong dãy fibonacci
cho fib = {0, 1, 1} + { fib[n-1] + fib[n-2] | n thuộc [3..] }
với mỗi n thuộc fib:
xuất n
List comprehension có tính "lazy", tức là chỉ khi ta cần dùng phần tử nào trong mảng thì phần tử đó mới được tính ra, do đó ta có thể dễ dàng định nghĩa ra mảng vô hạn phần tử trong VanVo.
Ví dụ 4: Hệ thống báo lỗi của chương trình
Tài liệu được viết chi tiết ở đây: balldk.github.io/posts/vanvo/