2016-06-08 13 views
0

In Java habe ich eine Gruppe von Objekten, die miteinander verbunden sind. Nehmen wir an, dass sie zusammen Modell sind und nennen wir es so.Zuordnung von Java-Objekten zu Prolog-Darstellung

Ich möchte dieses Modell gegen einige Spezifikation (definiert als eine Reihe von Bedingungen) validieren. Der Zustand kann so etwas wie diese:

forall child in parent.children 
    child.name startswith "A" 

Es Bündel von solchen Bedingungen sein kann und alle von ihnen müssen erfüllt sein, um zu sagen, dass ein Modell die Spezifikation entspricht. Alle Bedingungen sind einige Prädikate, die aus Variablen und logischen Ausdrücken bestehen, und ich möchte behandeln, ist eine Instanz von SAT-Problem.

Ich interessiere mich nicht für die Komplexität dieser Lösung, ich möchte nur Prolog verwenden, um eine richtige Substitution von Variablen zu finden (wenn es existiert, bedeutet das, dass ein Modell der Spezifikation entspricht).

Ich bin auf der Suche nach einem Weg, wie ich Prolog Wissensbasis leicht erstellen könnte, die aus Aussagen bestehen wird, die die Objekte darstellen, die mein Modell erstellen.

Haben Sie etwas Wertvolles zu empfehlen? Oder vielleicht können Sie einen anderen Ansatz zur Lösung dieses Problems vorschlagen?

+0

Nicht sicher, ob das hilft, aber haben Sie einen Blick in die Modellprüfung geworfen (wie https://en.wikipedia.org/wiki/List_of_model_checking_tools) – GhostCat

+0

Wenn Sie in Ihre Frage ein minimal ausgearbeitetes Beispiel aufnehmen könnten, wäre das Machen Sie es viel einfacher, eine Antwort zu versuchen. –

+0

Was für eine coole Idee! –

Antwort

0

Vielleicht könnte JPL Ihnen helfen, Ihr Ziel zu erreichen?

Von dem unfertig, fehlerbehaftetendocs:

JPL ist eine Bibliothek mit der SWI-Prolog Fremd-Schnittstelle und die Java JNI-Schnittstelle eine bidirektionale Schnittstelle zwischen Java und Prolog bereitgestellt, die verwendet werden können, um betten Sie Prolog in Java sowie zum Einbetten von Java in Prolog ein. In beiden Setups bietet es eine reentrant bidirektionale Schnittstelle.

Etwas weiter in der Dokumentation, ein Beispiel einen ContentPane zu erhalten jpl_call/4 bereitgestellt wird mit:

jpl_call(F, getContentPane, [], CP), 

bei der Dokumentation von jpl_call/4, Sehen wir sehen, dass sein erstes Argument sein kann:

  • eine Art, Klasse oder Objekt Klassennamen (zum statischen Methoden der bezeichneten Klasse oder für statische oder Instanzmethoden java.lang.Class)
  • eine Klasseninstanz oder ein Array (für statische oder Instanzmethoden)

Wenn Sie nur Informationen von Ihrem Java-Modell erhalten wollen, anstatt die Ausführung Logik, können Sie Werte mit jpl_get/3 abrufen. Es folgt ein Beispiel, in dem wir die Prolog-Variablen Color an eine Referenz eines Feldes eines Java-Auto-Objekts binden, das im statischen finalen .colour-Feld der Klasse example.class.car gespeichert ist.

jpl_get('example.class.car', colour, Colour) 

Allgemeiner:

jpl_get(+Class_or_Object, +Field, -Datum) 

Vice versa JPL bietet auch Funktionen für den Zugriff auf Prolog aus Java, eine bidirektionale Schnittstelle zur Verfügung stellt, mit zu arbeiten für beide Seiten Logik zwischen beiden Sprachen ausgeführt wird.

Wenn Sie nach einer spezifischeren Antwort in Bezug auf die Modellierung Ihres Problems suchen, wäre es in der Tat - wie von @ Boris kommentiert - viel einfacher für uns würde ein minimales Beispiel zur Verfügung gestellt werden, was genau Sie erreichen möchten.

Viel Glück!