Предположим, у меня есть подстановка S и список Xs , где каждая переменная в Xs также встречается в S . Как найти список S (Xs) , т.е. список, полученный путем применения подстановки S к списку Xs .
Более конкретно, у меня есть набор предикатов и правил DCG, которые выглядят примерно так:
pat(P) --> seg(_), P, seg(_).
seg(X,Y,Z) :- append(X,Z,Y).
Если я попытаюсь сопоставить шаблон P с переменными в списке, я получу подстановку S :
?- pat([a,X,b,Y],[d,a,c,b,e,d],[]).
X = c,
Y = e
Я хочу применить подстановку S = {X = c, Y = e} к списку Xs с переменными X и Y и получите список с выполненными заменами, но я не уверен, что лучший способ решить эту проблему.
Если бы я подходил к этой проблеме в Haskell, я бы построил конечную карту из переменных в значения, а затем выполнил бы подстановку. Эквивалентный подход заключается в создании списка в правиле DCG пар переменных и значений, а затем с помощью карты найдите нужный список. Однако это неподходящий подход.