как обращаться к файлу как к модулю в jpl

Я пытаюсь обратиться к файлу Prolog как к модулю, поскольку jpl не поддерживает несколько vms prolog.

В консоли swipl я могу сделать что-то подобное успешно

?- consult(mod1:'data/load.pro') .

В java (ну, на самом деле это scala, но все они поверх jvm), я могу обращаться к файлу напрямую без проблем.

scala> import jpl._

scala> val q = new Query("consult", Array[Term](new Atom("data/load.pl")))

scala> q.query()
...
true

однако, когда я пытался обратиться к файлу как к модулю, я всегда получаю исключение.

scala> val q = new Query("consult", Array[Term](new Atom("mod1:data/load.pl")))

scala> q.query()
  jpl.PrologExcepion:  PrologException: error(existence_error(source_sink, 'mod1:data/load.pl'), _0)
    at jpl.Query.get1(Query.java:336)
    at jpl.Query.hasMoreSolutions(Query.java:258)
    at jpl.Query.oneSolution(Query.java:688)
    at jpl.Query.query(Query.java:747)
    at .<init>(<console>:15)
    at .<clinit>(<console>)
    ....

Кто-нибудь может указать мне правильный способ обращения к пролог-файлу как к модулю в jpl? Спасибо!


person Sheng    schedule 24.07.2013    source источник


Ответы (1)


Я думаю, вы можете поменять квалификацию модуля на предикат, и, конечно, это позволит вам передать полный путь вашего исходного файла:

val q = new Query("mod1:consult('full_path_to/load.pl')")
person CapelliC    schedule 24.07.2013
comment
К сожалению, это не работает, я получил исключение, jpl.JPLException: Term.putParams: больше фактических параметров, чем формальных. Что пока работает, так это то, что я помещаю синтаксис пролога непосредственно в строковый аргумент для Query, т.е. new Query(consult(mod1:'data/load.pro')) - person Sheng; 24.07.2013