41

Sto lavorando a un'applicazione in Java, che deve fare alcune deduzioni di regole logiche complesse come parte della sua funzionalità. Mi piacerebbe codificare le mie deduzioni logiche in Prolog o in qualche altro linguaggio di programmazione di logica/vincolo, invece di Java, poiché ritengo che il codice risultante sarà significativamente più semplice e più gestibile.Interpreter/compiler Prolog incorporato per Java

Ho cercato su Google le implementazioni Java incorporate su Prolog e ne ho trovato il numero, ognuna con pochissima documentazione. I miei criteri (modesto) che hai scelto sono:

  • dovrebbe essere integrabile in Java (per esempio, può essere abbinato con il mio pacchetto java invece di richiedere eventuali installazioni native su programmi esterni)
  • semplice interfaccia da utilizzare da Java (per avvio di detrazioni, ispezione dei risultati e aggiunta di regole)
  • venire con almeno alcuni esempi su come utilizzarlo
  • non deve necessariamente essere Prolog, ma altri linguaggi di programmazione di logica/vincoli con i criteri sopra potrebbero soddisfare anche i miei bisogni.

Quali scelte ho e quali sono i loro vantaggi e svantaggi?

+1

Non ho mai usato un Prolog-in-Java, ma un'altra opzione è quella di scrivere il proprio. Conosco almeno 2 libri Lisp che lo fanno in non troppe pagine (On Lisp e PAIP), quindi non può essere * così * difficile, nemmeno in Java. – Ken

+4

Certo, puoi creare un linguaggio di programmazione logico giocattolo in poche pagine di codice, ma sto cercando qualcosa di un po 'più robusto. Ora puoi fare una lisp giocattolo anche in un paio di pagine di codice, quindi credo che avrò solo quattro pagine e andrò bene :-) – Sami

+0

Queste sono alcune parole caricate che stai lanciando in giro! Non sono sicuro di ciò che rende una piccola implementazione di Prolog un "giocattolo", o in che modo non sono abbastanza "robusti". Una delle lezioni di Norvig era "Prolog è simile a Lisp sui punti principali"; un piccolo Prolog-on-Lisp, quindi, non è un "giocattolo", ma piuttosto un'interfaccia utente diversa per il compilatore. Non sarà così divertente in Java, ma non penso che stesse facendo * tanto * con i macro. – Ken

risposta

21

In base allo Wikipedia, le seguenti versioni di Prolog dispongono di interfacce Java. Ho collegato alle pagine principali per loro:

Buona fortuna con la tua ricerca!

+0

TuProlog sembra l'unico di questi che non richiede l'installazione di alcuna applicazione esterna. Lo esaminerò. Grazie. – Sami

+0

Mi piace molto il TuProlog. La documentazione forse non è così bella, ma l'implementazione è molto carina e, come hai detto, non è necessario mescolare le cose. –

+2

Wikipedia elenca molti più sistemi Prolog con interfaccia Java: JIProlog, Jekejeke Prolog, JLog, jTrolog, XSB Prolog, YAP Prolog. –

7

SWI prolog Un'implementazione molto popolare sembra avere uno Java interface as does SiCStus che sarebbe più semplice dell'utilizzo di JNI per istanziare un'istanza nel processo Java. Ho usato entrambi da C un po 'di tempo fa e li consiglio. Il mio prefference sarebbe SWI in quanto è open source e dalla mia esperienza l'implementazione de facto.

La documentazione per l'interfaccia Java di SWI sembra essere adeguata e il processo di incorporamento è abbastanza semplice.

+1

SWI Prolog e SiCStus richiedono che l'installazione nativa sia utilizzabile da Java. – Sami

+2

Sono sicuro che è possibile impacchettare i file eseguibili o le DLL da includere nei file JAR. SWI è iniziato come un'applicazione unix, quindi ho pensato che non faccia cose che sono richieste dagli installatori reali, cioè apportare modifiche al registro o installare oggetti COM. –

3

Amzi prolog è in circolazione da un po '. L'ho usato brevemente ma non la versione integrata. tuttavia hanno una buona documentazione e il supporto può essere acquistato. Hanno una porta Java quindi potrebbe valere la pena dare un'occhiata.

5

Ho dovuto fare lo stesso 2 anni fa. Ho usato SWI interface which is called JPL. Ti permette di caricare un file Prolog, asserirlo e interrogarlo. Richiede l'installazione di SWI Prolog, ma non è affatto un problema. SWI Prolog è available for many platforms.

Ho anche provato delle alternative che erano implementate al 100% in Java e non richiedevano programmi esterni. Tutti loro erano bacati o difficili da usare. Non perdere tempo.

+1

e funziona anche per YAP Prolog – Sergio

1

Prova 3.0 http://www.prova.ws è quasi completato. È, tuttavia, non solo un altro Prolog, ma un mix di stili di programmazione, in particolare, utile per una facile integrazione Java bidirezionale, programmazione di agenti reattivi, integrazione con ESB, logica del flusso di lavoro ed elaborazione degli eventi. Questa versione è una completa riscrittura da zero, quindi alcune funzionalità meno recenti, come l'integrazione OWL, mancano, ma sono destinate a tornare nella revisione successiva.

1

C'è il Mini-Kanren for Scala, che offre un'implementazione JVM nativa di un linguaggio di programmazione logica snello, hackerabile, moderno basato su Horn.

2

LPA non offre la LPA Intelligence Server come un modo di incorporare il suo motore Prolog all'interno di una grande varietà di linguaggi tradizionali tra cui Java, .Net ecc

Clive

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

1

Un'altra opzione utile I recentemente incontrato è JSetL. Non è un Prolog, ma è una libreria di programmazione vincoli per Java, con supporto per variabili logiche, unificazione , risoluzione di vincoli e non determinismo.

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

2

Puoi anche dare un'occhiata a the Prol engine che ho creato. Ti consente di incorporare Prolog nei tuoi programmi Java (ma non è molto veloce)

2

Due Prolog commerciali scritti in Java: Minerva di IF Computer Japan e Jekejeke. Entrambi sono molto vicini agli ISO.

2

Clojure è un linguaggio simile a Lisp basato su JVM con una libreria (core.logic) che supporta la programmazione basata su vincoli e logica. Clojure ha anche un gran numero di servizi per la generazione di classi java e working with java code, quindi l'interoperabilità tra le due lingue è banale.