如何从Prolog中的术语中提取子项?

时间:2015-09-25 21:36:25

标签: tree prolog extract term

如何从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)

1 个答案:

答案 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.

在这里,我限制了提取的术语以匹配您在问题中显示的内容,否则会有很长的解决方案列表...