将叶子中的信息放在列表中

时间:2011-09-04 13:08:14

标签: list tree prolog dcg

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

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

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

3 个答案:

答案 0 :(得分:2)

您的代码中存在多个错误,正确的代码如下所示:

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

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

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

答案 1 :(得分:2)

另外,在描述列表时,请考虑使用DCG表示法:

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

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

答案 2 :(得分:0)

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