Я пытаюсь использовать движок SWI-PL в C ++, используя SWI-cpp.h
,
У меня нет учебника, я использую только эта ссылка и я ищу в репозиториях GitHub несколько примеров.
Мой код работает нормально, за исключением одной вещи; вызывая это определение:
foo([bar]).
Как видите, определение требует списка.
Так как я не могу поставить PlTermv
в PlTermv
Я понятия не имею, как построить список. Я мог бы использовать PlTail
, но я знаю только способ, которым я должен добавить пустую голову.
Это мой код CPP:
PlTermv av(1);
// Load external pl file that contaions the foo definition.
PlCall("consult", PlTerm("foobar.pl"));
PlAtom bar = PlAtom("hello");
// I want Prolog to return a list with this compound.
av[0] = PlCompound("foo", PlTermv(bar));
PlCall("call", av); // So that this statement returns 'true' instead of 'false'.
Как я мог изменить этот код таким образом, чтобы PlCall("call",av);
возвращаетсяtrue
?
Создание списков в Прологе может быть сделано с помощью atomic_list_concat / 3 сказуемое.
Это означает PlCall
должен быть вызван еще раз в коде, и его результат должен быть сохранен в PlTerm
:
PlTermv av(1);
// Load external pl file that contaions the foo definition.
PlCall("consult", PlTerm("foobar.pl"));
PlTerm list;
// Use space as separator. Sets the value of 'list' to '[bar]'.
PlCall("atomic_list_concat", PlTermv(list, " ", "bar"));
av[0] = PlCompound("foo", PlTermv(list));
PlCall("call", av); // returns 'true'
Других решений пока нет …