Заменить термин с переменной в прологе
У меня есть 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([_|_],_).