Tại sao không phải là động cơ quy tắc được viết trong Prolog? [đóng cửa]


16

Từ những gì tôi đã thấy về Prolog, có vẻ như nó sẽ là lý tưởng để chế tạo một công cụ quy tắc cho một ứng dụng. Tuy nhiên, tôi không tin rằng tôi đã từng thấy một công cụ quy tắc được viết bằng Prolog. Có một số hạn chế cố hữu trong Prolog (ví dụ: thuật toán thu gom rác kém) sẽ ngăn không cho nó được sử dụng để xây dựng một công cụ quy tắc?


7
Thang. (hầu như) không ai biết prolog, và thậm chí nhiều nhà phát triển không muốn biết bất cứ điều gì không hoàn thành công việc hàng ngày của họ để họ có thể về nhà. Thật không may, Prolog khá tuyệt.
Jimmy Hoffa

3
Prolog làm cho một edsl tuyệt vời mặc dù. Nhúng prolog vào một ngôn ngữ như Haskell hoặc Scheme là cách tiếp cận tôi thường thực hiện
Daniel Gratzer 16/07/13

3
@JimmyHoffa Điều đó đang giảm dần. Một số peoople học prolog và sau đó cố gắng chủ động quên nó trong phần còn lại của cuộc đời làm việc của họ.
ZJR

5
Tôi thấy 3 phiếu gần - ai quan tâm cho tôi biết có vấn đề gì với câu hỏi để tôi có thể sửa hay rút lại không?
Onorio Catenacci

2
Tôi đã bỏ phiếu để đóng là "chủ yếu dựa trên ý kiến." Nếu bạn có thể thuyết phục tôi bằng cách khác, tôi sẽ rút lại phiếu bầu gần của tôi. Cá nhân tôi thấy Prolog mờ đục; Tôi mong đợi một công cụ quy tắc có một cú pháp trực quan hơn để xác định quy tắc. Và nó một ngôn ngữ lập trình, không phải là một nguyên mẫu cú pháp cho một công cụ quy tắc.
Robert Harvey

Câu trả lời:


15

Các công cụ quy tắc trong giai đoạn trứng nước được viết gần như độc quyền bằng Prolog - đó là ngôn ngữ logic. Đối với một bộ quy tắc nhỏ họ làm việc tuyệt vời. Tuy nhiên, hóa ra họ không có quy mô rất tốt. Tôi không có một tài liệu tham khảo dứt khoát, nhưng sự hiểu biết của tôi là cách Prolog xử lý chuỗi các quy tắc là không hiệu quả - mô hình đệ quy được tạo ra để tạo ra các ngăn xếp rất lớn khiến nó thu thập dữ liệu.

Sự phát triển của thuật toán RLEX và những người kế thừa của nó cho phép một cách hiệu quả hơn để xử lý số lượng lớn các quy tắc, và do đó đã tiếp quản.

Có lẽ prolog hiện đại sẽ hiệu quả hơn so với những năm 80, khi hầu hết các công việc ban đầu đã được thực hiện.



1
Một bài viết khác liên quan đến vấn đề này: haleyai.com/wordpress/2013/06/22/ trên
Matthew Flynn

Câu hỏi điên rồ. Không phải mọi người đã thực hiện RLEX trong prolog, do đó có được cả hai từ tốt nhất? (có rất nhiều RLEX không làm điều đó prolog làm).
dùng48956

14

Câu trả lời trực tiếp: bởi vì nếu những người tạo ra Công cụ quy tắc biết về Prolog (hoặc Mercury hoặc PLANNER hoặc khắc) thì họ sẽ không viết Công cụ quy tắc, họ sẽ sử dụng Prolog.


5

Nói chung, điểm của một công cụ quy tắc là nó là một phần của ứng dụng khác. Rất hiếm khi thấy các ứng dụng được viết bằng Prolog và không có giao diện phổ biến để kết nối Prolog với các ứng dụng được viết bằng các ngôn ngữ khác.

Một công cụ dựa trên quy tắc cho các công cụ quy tắc, được viết để thêm vào các ứng dụng khác, là CLIPS . CLIPS dựa trên OPS5 và sử dụng thuật toán Rete để cắt tỉa các quy tắc.


không hoàn toàn đúng, có một số giao diện từ các chương trình bên ngoài đến mã Prolog. SWI-Prolog có giao diện C ++ và cách kết nối với R.
Rudolf Olah 16/07/13

3
Trên thực tế, tất cả các công cụ prolog tôi từng thấy đều hoạt động với C hoặc C ++ vì "không ai" sử dụng Proolog cho các ứng dụng hoàn chỉnh, nhưng "mọi người" đều gọi các hàm C để gọi các lib chuyên dụng. tức là GNU Prolog gprolog.univ-paris1.fr/manual/html_node/gprolog065.html
johannes

Cảm ơn con trỏ đó @johannes. Tôi hoàn toàn không biết về GNU Prolog; thực tế là nó có thể được gọi từ C.
Onorio Catenacci

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.