我如何从 Prolog 中的术语中提取子术语?
How I can extract a subterm from a term in Prolog?
如何从 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).
术语的简单操作源于统一的递归定义。
那么,让我们首先 'extract' 一个复合参数:
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.
这里我限制了提取的术语以匹配您在问题中显示的内容,否则将显示一长串解决方案...
如何从 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).
术语的简单操作源于统一的递归定义。 那么,让我们首先 'extract' 一个复合参数:
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.
这里我限制了提取的术语以匹配您在问题中显示的内容,否则将显示一长串解决方案...