[英]Embedded Prolog Interpreter/Compiler for Java
我正在開發一個Java應用程序,它需要做一些復雜的邏輯規則推導作為其功能的一部分。 我想在Prolog或其他邏輯/約束編程語言而不是Java中編寫我的邏輯演繹編碼,因為我相信結果代碼將更加簡單和易於維護。
我在Prolog上搜索了嵌入式Java實現,並發現了它們的數量,每個都只有很少的文檔。 我的(適度)選擇標准是:
我有什么選擇,它們的優點和缺點是什么?
根據Wikipedia ,以下版本的Prolog具有Java接口。 我已經鏈接到他們的主頁:
祝您的搜索順利!
SWI prolog一個非常流行的實現似乎有一個Java接口和SiCStus一樣 ,這比使用JNI在Java進程中實例化一個實例更容易。 我很久以前就使用了C和推薦它們。 我的首選是SWI,因為它是開源的,根據我的經驗, 事實上的實現。
SWI Java接口的文檔似乎已經足夠,嵌入過程非常簡單。
我需要在2年前做同樣的事情。 我使用了名為JPL的SWI接口 。 它允許您加載Prolog文件,在其上斷言並查詢它。 它確實需要安裝SWI Prolog,但這根本不是問題。 SWI Prolog 適用於許多平台 。
我也嘗試過用Java實現100%並且不需要外部程序的替代方案。 所有這些都是馬車或難以使用。 不要浪費你的時間。
Amzi prolog已經存在了一段時間。 我簡單地使用了它,但沒有使用嵌入式版本。 但他們確實有很好的文檔和支持可以購買。 他們有Java端口,所以值得一看。
您還可以查看我創建的Prol引擎 。 它允許您將Prolog嵌入到Java程序中(但它不是很快)
用Java編寫的兩本商業Prolog:IF Computer Japan和Jekejeke的Minerva。 兩者都非常接近ISO。
Clojure是一種基於JVM的類似Lisp的語言,其庫( core.logic )支持基於邏輯和約束的編程。 Clojure還有大量用於生成java類和使用java代碼的工具 ,因此兩種語言之間的交互操作是微不足道的。
Prova 3.0 http://www.prova.ws即將完成。 然而,它不僅僅是另一種Prolog,而是混合編程風格,特別適用於簡單的雙向Java集成,反應式代理編程,與ESB的集成,工作流邏輯和事件處理。 這個版本是從零完全重寫的,因此缺少一些舊功能,如OWL集成,但必須在下一版本中返回。
Scala有Mini-Kanren ,它為您提供了一種基於Jorn子句的精簡,可黑客,現代的邏輯編程語言的原生JVM實現。
我最近遇到的另一個有價值的選擇是JSetL。 它不是Prolog,而是Java的約束編程庫,支持邏輯變量,統一,約束求解和非確定性。
Java中有許多Prolog實現。 它們不是非常快,但在Java中使用方便。 例如: TuProlog或PrologCafe您還可以查看以下關於Java中Prolog程序的執行和分析主題的學士論文。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.