假设我有一个替换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}应用于具有变量X和Y的列表Xs,并接收带有替换的列表,但我不确定解决问题的最佳方法是什么.
如果我在 Haskell 中解决这个问题,我会构建一个从变量到值的有限映射,然后执行替换。等效的方法是在 DCG 规则中生成一个变量和值对的列表,然后使用该映射找到所需的列表。然而,这不是一个合适的方法。