Vì Erlang dựa trên Prolog, điều này có nghĩa là Erlang là một ngôn ngữ Constraint-Logic?
Liệu Erlang có khối xây dựng Prolog của: kiện, quy tắc và QueryErlang là một ngôn ngữ lập trình Constraint-Logic?
Trả lời
No.
Cú pháp của Erlang rất giống với Prolog, nhưng ngữ nghĩa rất khác nhau. Một phiên bản đầu tiên của Erlang được viết bằng Prolog, nhưng ngày nay Erlang không còn được gọi là "dựa trên Prolog" nữa.
Erlang không bao gồm backtracking hoặc các tính năng khác của Prolog thường xuyên được sử dụng cho lập trình logic. Tất nhiên bạn có thể thực hiện Prolog trên các ngôn ngữ khác, và Erlang là một sự lựa chọn dễ dàng hơn so với một số ngôn ngữ khác. Điều này có thể được nhìn thấy trong dự án "Erlog" Robert Virding của:
Nói tóm lại, không có nó không :) Nó không có những khối xây dựng. Nó tập trung vào sự đồng thời, lập trình song song, các ứng dụng phân tán và khả năng chịu lỗi (trong khi đó là một ngôn ngữ có chức năng, nghiêm ngặt, khai báo).
Bạn cũng có thể sử dụng tính năng danh sách hiểu trong Erlang như một cách để thực hiện trong một phong cách lập trình hạn chế.
% Produce the tuple {1, 0}
%
constraint_test() -> [ {A, B} ||
A <- lists:seq(0, 1),
B <- lists:seq(0, 1),
A > B].
Hoặc bạn có vị trí máy phát điện của các yếu tố lấy từ danh sách (A < - danh sách: seq (0, 1)) và những hạn chế (A> B).
Gần đây tôi đã giải quyết được sự cố được liên kết bên dưới. Và nếu bạn đặt các ràng buộc chính xác, bạn sẽ có câu trả lời trong giây lát.
http://www.geocaching.com/seek/cache_details.aspx?guid=a8605431-53b5-4c2c-97fb-d42ee299b167
Có.
Phiên bản đầu tiên của Erlang không được viết bằng Prolog, nó được viết bằng một trong các ngôn ngữ lập trình logic lựa chọn được cam kết. Những ngôn ngữ này đã làm giảm khả năng quay lại của Prolog do đó cái tên "sự lựa chọn cam kết" có nghĩa là một khi lựa chọn đã được thực hiện thì không thể quay lại và thử lại. Điều này đã được thực hiện để đơn giản hóa làm cho một hình thức lập trình logic đồng thời. Một cách khác để xem xét nó là các quá trình đồng thời sẽ áp dụng các ràng buộc cho các biến, nhưng là các biến logic và do đó không thể gán lại chúng sẽ là các ràng buộc liên tiếp không thay đổi giá trị. Ràng buộc có thể gán một giá trị một phần cho một biến, chứa một biến khác mà sẽ được gán sau này. Đây là mô hình cơ bản của Erlang. Lập trình logic hạn chế có khuynh hướng được sử dụng cho các phiên bản trong đó các ràng buộc cũng có thể bao gồm các câu lệnh toán học về các phạm vi có thể có của các biến với các giá trị số dự định.
Cú pháp của Erlang cho thấy di sản lập trình logic của nó, nhưng điều quan trọng là phải hiểu nó đã chọn điều này thông qua các ngôn ngữ lập trình logic lựa chọn đã cam kết, chọn nó từ Prolog, không trực tiếp từ Prolog. Mặc dù một số ngôn ngữ lập trình logic lựa chọn đã được đưa ra trong thập niên 1980, họ không thể thoát khỏi bóng của Prolog, và bị kéo xuống bởi sự liên kết của họ với sáng kiến Thế hệ thứ 5 thất bại của Nhật Bản. sự khác biệt nhỏ nên không có tiêu chuẩn nào được thiết lập.
Các nhà phát triển của Erlang đã giới thiệu một cú pháp cú pháp mang lại vẻ ngoài chức năng hơn cho mã và đưa ra quyết định tiếp thị để quảng bá nó như một ngôn ngữ lập trình hàm chứ không phải logic. loại bỏ lập trình logic.
Cảm ơn, bây giờ tôi hiểu được tính ràng buộc và bất biến của các biến trong Erlang tốt hơn nhiều! Tốt để biết nó đến từ đâu. – Amiramix