Câu hỏi Erlang là một ngôn ngữ lập trình Constraint-Logic?


Vì Erlang dựa trên Prolog, điều này có nghĩa là Erlang là một ngôn ngữ Constraint-Logic?
Erlang có các khối xây dựng của Prolog không: Sự kiện, quy tắc và truy vấn


16
2018-03-22 03:02


gốc




Các câu trả lời:


Không.

Cú pháp của Erlang rất giống với cú pháp của 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" của Robert Virding:

https://github.com/rvirding/erlog


25
2018-03-22 03:34





Vâng.

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 những ngôn ngữ lập trình logic được lựa chọn. 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 tạo ra một vẻ ngoài chức năng hơn cho mã, và đưa ra quyết định tiếp thị để thúc đẩy nó như một ngôn ngữ lập trình hàm chứ không phải là logic, cho phép nó không bị kéo xuống. .


6
2018-01-28 18:31



Cảm ơn, bây giờ tôi hiểu 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


Trong ngắn hạn, 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).


0
2018-03-22 03:08





Bạn cũng có thể sử dụng tính năng đọc danh sách trong Erlang như một cách để thực hiện theo một kiểu lập trình ràng buộc.

% Produce the tuple {1, 0}
%
constraint_test() -> [ {A, B} ||
  A <- lists:seq(0, 1),
  B <- lists:seq(0, 1),
  A > B].

Bạn cũng có thể đặt các phần tử tạo ra từ danh sách (A <- lists: seq (0, 1)) và các ràng buộc (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


0
2018-04-12 20:31