0

我想编写一个程序,将叶子中的信息放在列表中的树中。我试过这样做:

leaves(l(_), [_]). 
leaves(b(B1, B2), [L]):- leaves(B1, [L1]), leaves(B2, [L2]). append(L1, L2, L). 

但它给了我L=[_A]。这是为什么?

4

3 回答 3

2

您的代码中有几个错误,正确的代码如下所示:

leaves(l(X), [X]).
leaves(b(B1, B2), L):- leaves(B1, L1), leaves(B2, L2), append(L1, L2, L).

我认为主要问题是使用_. 这是一个匿名变量,意思是“任何东西都可以在这里”。如果你在一个学期里有两次,那么两者_都是不同的变量。

另外,你有.beforeappend而不是,. 我的 Prolog 解释器 (SWI-Prolog) 报告了两个关于单例变量的警告,你不应该忽略它们。

于 2011-09-04T13:17:05.057 回答
2

此外,当您描述列表时,请考虑使用 DCG 表示法:

leaves(l(L))     --> [L].
leaves(b(B1,B2)) --> leaves(B1), leaves(B2).

用法:?- phrase(leaves(Tree), Leaves)

于 2011-09-04T14:13:39.913 回答
0

使用 调试您的程序trace,这将逐步执行您的查询,以便您了解结果错误的原因。基本上,作为列表条目给出的变量通常由单例变量(已声明但未使用,即实例化)引起,如 svick 所述。

于 2011-09-04T13:47:41.653 回答