41

Tôi đang làm việc trên một ứng dụng trong Java, cần thực hiện một số khoản khấu trừ quy tắc logic phức tạp như là một phần của chức năng của nó. Tôi muốn mã các khoản khấu trừ logic của mình trong Prolog hoặc một số ngôn ngữ lập trình logic/ràng buộc khác, thay vì Java, vì tôi tin rằng mã kết quả sẽ đơn giản hơn và dễ bảo trì hơn.Trình biên dịch Prolog/Trình biên dịch được nhúng cho Java

Tôi googled cho việc triển khai Java được nhúng trên Prolog và số lượng được tìm thấy trong số đó, mỗi tài liệu có rất ít tài liệu. tiêu chí (khiêm tốn) lựa chọn của tôi là:

  • nên nhúng trong Java (ví dụ có thể được đóng gói với gói java của tôi thay vì yêu cầu bất kỳ cài đặt gốc vào chương trình bên ngoài)
  • giao diện đơn giản để sử dụng từ Java (ví bắt đầu khấu trừ, kiểm tra kết quả và thêm quy tắc)
  • có ít nhất một vài ví dụ về cách sử dụng nó
  • không nhất thiết phải là Prolog, nhưng các ngôn ngữ lập trình logic/ràng buộc khác với các tiêu chí trên sẽ phù hợp với nhu cầu của tôi, quá.

Tôi có những lựa chọn nào và ưu điểm và nhược điểm của chúng là gì?

+1

Tôi chưa bao giờ sử dụng một Prolog-in-Java, nhưng tùy chọn khác là để viết riêng bạn. Tôi biết ít nhất 2 cuốn sách Lisp làm điều này trong không quá nhiều trang (On Lisp, và PAIP), vì vậy nó không thể được * rằng * cứng, ngay cả trong Java. – Ken

+4

Chắc chắn, bạn có thể làm cho một ngôn ngữ lập trình đồ chơi logic trong một vài trang mã, nhưng tôi đang tìm kiếm một cái gì đó mạnh mẽ hơn một chút. Bây giờ, bạn có thể làm một đồ chơi lisp trong một vài trang mã quá, vì vậy tôi đoán tôi sẽ chỉ cần bốn trang và tôi sẽ tốt để đi :-) – Sami

+0

Đó là một số từ nạp bạn đang ném xung quanh! Tôi không chắc chắn những gì làm cho một Prolog nhỏ thực hiện một "đồ chơi", hoặc trong những cách mà họ không "mạnh mẽ" đủ. Một trong những bài học của Norvig là "Prolog tương tự như Lisp trên những điểm chính"; một Prolog-on-Lisp nhỏ, sau đó, không phải là một "đồ chơi", mà là một giao diện người dùng khác cho trình biên dịch của bạn. Nó sẽ không được nhiều niềm vui trong Java nhưng tôi không nghĩ rằng ông đã làm * mà * nhiều với các macro. – Ken

Trả lời

21

Theo Wikipedia, các phiên bản Prolog sau đây có giao diện Java. Tôi đã liên kết với các trang chính cho họ:

Chúc may mắn với tìm kiếm của bạn!

+0

TuProlog có vẻ như chỉ có một trong số đó sẽ không yêu cầu bất kỳ ứng dụng bên ngoài được cài đặt đầu tiên. Tôi sẽ xem xét điều đó. Cảm ơn. – Sami

+0

Tôi thích TuProlog rất nhiều. Tài liệu có thể không phải là nóng, nhưng thực hiện là khá tốt đẹp và, như bạn đã nói, nó không yêu cầu trộn những thứ lên. –

+2

Wikipedia liệt kê nhiều hệ thống Prolog hơn với giao diện Java: JIProlog, Jekejeke Prolog, JLog, jTrolog, XSB Prolog, YAP Prolog. –

7

SWI prolog Một triển khai rất phổ biến dường như có một số Java interface as does SiCStus sẽ dễ dàng hơn việc sử dụng JNI để khởi tạo một cá thể trong Quy trình Java của bạn. Tôi đã sử dụng cả hai từ C khá một lúc trước và làm khuyên họ. Tiền tài trợ của tôi sẽ là SWI vì nó là nguồn mở và từ kinh nghiệm của tôi về việc triển khai de facto.

Tài liệu về giao diện Java của SWI có vẻ đủ và quy trình nhúng khá thẳng về phía trước.

+1

SWI Prolog và SiCStus yêu cầu cài đặt gốc có thể sử dụng được từ Java. – Sami

+2

Tôi chắc chắn rằng bạn có thể gói các tệp thi hành hoặc tệp DLL được đưa vào tệp JAR của bạn. SWI bắt đầu như là một ứng dụng unix vì vậy tôi sẽ giả định nó không làm những thứ được yêu cầu bởi trình cài đặt thực sự - tức là, thay đổi registry hoặc cài đặt các đối tượng com. –

3

Amzi prolog đã được sử dụng trong một thời gian. Tôi đã sử dụng nó một thời gian ngắn nhưng không sử dụng phiên bản được nhúng. tuy nhiên họ có tài liệu và hỗ trợ tốt có thể được mua. Họ có cổng Java vì vậy nó có thể có giá trị một cái nhìn.

5

Tôi cần thực hiện tương tự 2 năm trước. Tôi đã sử dụng SWI interface which is called JPL. Nó cho phép bạn tải một tập tin Prolog, khẳng định nó và truy vấn nó. Nó đòi hỏi một cài đặt của SWI Prolog nhưng đó không phải là vấn đề gì cả. SWI Prolog là available for many platforms.

Tôi cũng đã thử các giải pháp thay thế đã được triển khai 100% trong Java và không yêu cầu các chương trình bên ngoài. Tất cả chúng đều bị lỗi hoặc khó sử dụng. Đừng lãng phí thời gian của bạn.

+1

và cũng hoạt động cho YAP Prolog – Sergio

1

Cấp 3.0 http://www.prova.ws sắp hoàn thành. Tuy nhiên, nó không chỉ là một Prolog khác mà là sự kết hợp các kiểu lập trình, đặc biệt, hữu ích cho việc tích hợp Java hai hướng dễ dàng, lập trình tác nhân phản ứng, tích hợp với ESB, logic luồng công việc và xử lý sự kiện. Phiên bản này được viết lại hoàn toàn từ số không, vì vậy một số tính năng cũ hơn, như tích hợp OWL, bị thiếu, nhưng chắc chắn sẽ trả về trong bản sửa đổi tiếp theo.

1

Mini-Kanren for Scala, cung cấp cho bạn bản thực thi JVM nguyên gốc của ngôn ngữ lập trình logic dựa trên Horn, có thể tấn công, hiện đại.

2

LPA không cung cấp LPA Intelligence Server như một cách để nhúng cơ Prolog của nó trong toàn bộ một loạt các ngôn ngữ chủ đạo bao gồm Java, Net vv

Clive

http://www.lpa.co.uk/int.htm

1

Một tùy chọn đáng giá tôi gần đây là JSetL. Nó không phải là một Prolog, nhưng một thư viện lập trình ràng buộc cho Java, với sự hỗ trợ cho các biến logic, thống nhất, giải quyết ràng buộc và không xác định.

http://prmat.math.unipr.it/~gianfr/JSetL/index.html

2

Bạn cũng có thể xem the Prol engine mà tôi đã tạo. Nó cho phép bạn nhúng Prolog vào các chương trình Java của bạn (nhưng nó không phải là rất nhanh)

2

Hai Prolog thương mại được viết bằng Java: Minerva by IF Computer Japan và Jekejeke. Cả hai đều rất gần với ISO.

2

Clojure là ngôn ngữ giống như Lisp dựa trên JVM với thư viện (core.logic) hỗ trợ lập trình dựa trên logic và ràng buộc. Clojure cũng có một số lượng lớn các cơ sở để tạo các lớp java và working with java code, do đó, giữa các ngôn ngữ là không đáng kể.