1

我想通过练习快速复习我的课程。但我没有办法让这些做法检查。你能给我一个解决方案,所以当我遇到困难时。我可以在这里很快找到一些指导。第一个问题如下所述。提前致谢。

问题1。我们回想一下,如果 T 是一个项并且 L 是包含 L 的函子和主要子项的列表,则满足内置谓词 T =.. L。例如,f(a,g(b)) =..当 L = [ f, a, g(b) ] 时满足 L,并且 a =.. 当 List = [a] 时满足 List。

使用 =.. 定义当 T1 是 T2 的子项时满足的谓词 subterm(T1,T2)。您可以假设 T1 和 T2 没有变量。您可能还想使用内置谓词 atomic(X) 或 Compound(X) 按此顺序检查 X 是否是原子项和结构。

我的解决方案是:

subterm(X,[X]):-atom(X),!.
subterm(T1,T2):-
compound(T1),
T1=..U,
U=[X|Y],
T2=Y.

任何建议将被认真考虑。谢谢!

4

1 回答 1

1

如果项 T 是其自身的子项,则定义可以非常简单:

subterm(T, T).
subterm(T1, T2) :-
  T2 =.. [_|As],
  member(A, As),
  subterm(T1, A).

无论如何,您可以看到上面的谓词实现了对树结构术语的“惰性”访问。

于 2013-07-28T22:11:42.337 回答