我想编写一个程序,将叶子中的信息放在列表中的树中。我试过这样做:
leaves(l(_), [_]).
leaves(b(B1, B2), [L]):- leaves(B1, [L1]), leaves(B2, [L2]). append(L1, L2, L).
但它给了我L=[_A]
。那是为什么?
答案 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所述。