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ì?
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
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
Đó 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