Заменить термин с переменной в прологе

У меня есть DCG в Прологе, который я могу запросить так:

q(Tree, [name, of, company], []).

и получить ответ, который показывает мне путь, использованный для анализа запроса:

Tree = q(['company (Class)', 'name (Attribute)'])

Теперь я хотел бы задать такой запрос:

q(Tree, [name, of, acme], []).

и не соответствует термину acmeЯ хотел бы создать переменную Acme так что я получаю что-то вроде:

Acme = компания
Tree = q(['company (Class)', 'name (Attribute)'])

Я использую SWI-Prolog и запрашиваю его на другом языке, поэтому все запросы строчные. Другой вариант - создать словарь всех допустимых терминов и заменить все неизвестные в запросе переменной, но я надеюсь на решение Prolog.

Спасибо.

1 ответ

Решение

Правильно ли я понимаю, что вам нужны все префиксные списки? Подойдет ли вам следующее:

1 ?- p([name,of,company],L).
L = [name, of, company] ;
L = [name, of|_G456] ;
L = [name|_G453] ;
true.

2 ?- p([name,of,department,of,company],M).
M = [name, of, department, of, company] ;
M = [name, of, department, of|_G551] ;
M = [name, of, department|_G548] ;
M = [name, of|_G545] ;
M = [name|_G542] ;
true.

Если это предполагаемое поведение, то код, который его реализует, может быть

p([],[]).
p([X|Xs],[X|Ys]) :- p(Xs,Ys).
p([_|_],_).
Другие вопросы по тегам