доступ к термину списка prolog

#prolog #jpl

#пролог #jpl

Вопрос:

Я использую jpl для вызова prolog из java. Я использую следующий код на Java, чтобы получить значение X из prolog.

 String t4 = "myNumber(X)";
Query q4 = new Query(t4);
System.out.println( "first solution of "   t4   ": X = "   q4.oneSolution().get("X"));
  

И мое решение—

 first solution of myNumber(X): X = '.'(2, [])--which is true.
  

Что я хотел сделать сейчас, так это получить значение 2 из решения и удвоить число.
Кто-нибудь может мне помочь, как с этим справиться?

Комментарии:

1. Вам следует рассмотреть другое название вопроса. По крайней мере, я не вижу никакой связи с JPanel и JMenuBar.

Ответ №1:

oneSolution() возвращает хеш-таблицу привязок имени переменной к термину (как они говорят). Затем вы должны проверить термин (непроверенный):

 Term listTerm = q4.oneSolution().get("X");
Term firstListItem = listTerm.arg(1);
double value = firstListItem.doubleValue(); // alternatively, use intValue() or so
  

Также проверьте документацию к термину.

Редактировать: исправлены ошибки

Комментарии:

1. Я имел в виду listTerm.arg(1), конечно. Помните, что вы должны принять ответы на свои вопросы. Вы не приняли ни один из ваших старых вопросов. Вы не получите много ответов, если не сделаете этого.

2. я новичок в этом site..so не знал, что я должен принимать ответы .. извините за это

3. Таким же образом, если решением является myNumber(X): X = ‘.'(2, ‘.'(3, [])) как я должен передать аргументы, чтобы получить все значения 2,3 и т.д…

4. void toList(Term t, List xs) { if (t.arity() == 2) { xs.add(t.arg(1).doubleValue()); toList(t.arg(2), xs); } } или, я подозреваю, вы можете использовать Term.toTermArray()

5. я пытался использовать Term.toTermArray(), но безуспешно. Моя часть кода заключается public Term[] toTermArray(Object k1) { try { int len = this.listLength(k1); Term[] ts = new Term[len]; Term t = this; for (int i = 0; i < len; i ) { ts[i] = t.arg(1); t = t.arg(2); } return ts; } catch (JPLException e) { throw new JPLException("Term.toTermArray: term is not a proper list"); } } в том, что я вызываю эту функцию с помощью ‘toTermArray (k);` где k — это объект, который содержит список. Можете ли вы, пожалуйста, помочь мне с этим