如何从Prolog中的术语中提取子项?
一个例子,我试图在任何地方提取一个名为 r 的谓词,但我知道如何。有帮助吗?
term_extraxtions(的 S(N(1),T(3,4,R(2,4)))下,ModifiedTerm,ExtractedTerm) 将如下。
ModifiedTerm = s(n(1),t(3,4))。
ExtractedTerm = r(2,4)。
答案 0 :(得分:0)
术语的简单操作源于统一的递归定义。 所以,让我们首先从一个化合物中“提取”一个参数:
exterm(T, M, E) :-
T =.. [F|As],
select(E, As, Bs),
M =.. [F|Bs].
这个谓词可以完成大部分工作:
?- exterm(a(1,b(u)),M,E).
M = a(b(u)),
E = 1 ;
M = a(1),
E = b(u) ;
M = a(1, b),
E = u ;
false.
要概括和完成作业,您必须允许递归每个参数,修改它提取元素,然后重新组合参数列表。
...
append(X, [Y|Ys], As),
... % recursive call
append(X, [Z|Ys], Bs),
...
看看你是否可以完成它:
?- exterm(s(n(1),t(3,4,r(2,4))),ModifiedTerm,ExtractedTerm), ExtractedTerm=r(_,_).
ModifiedTerm = s(n(1), t(3, 4)),
ExtractedTerm = r(2, 4) ;
false.
在这里,我限制了提取的术语以匹配您在问题中显示的内容,否则会有很长的解决方案列表...