我想编写一个程序,将叶子中的信息放在列表中的树中。我试过这样做:
leaves(l(_), [_]).
leaves(b(B1, B2), [L]):- leaves(B1, [L1]), leaves(B2, [L2]). append(L1, L2, L).
但它给了我L=[_A]
。这是为什么?
您的代码中有几个错误,正确的代码如下所示:
leaves(l(X), [X]).
leaves(b(B1, B2), L):- leaves(B1, L1), leaves(B2, L2), append(L1, L2, L).
我认为主要问题是使用_
. 这是一个匿名变量,意思是“任何东西都可以在这里”。如果你在一个学期里有两次,那么两者_
都是不同的变量。
另外,你有.
beforeappend
而不是,
. 我的 Prolog 解释器 (SWI-Prolog) 报告了两个关于单例变量的警告,你不应该忽略它们。
此外,当您描述列表时,请考虑使用 DCG 表示法:
leaves(l(L)) --> [L].
leaves(b(B1,B2)) --> leaves(B1), leaves(B2).
用法:?- phrase(leaves(Tree), Leaves)
。
使用 调试您的程序trace
,这将逐步执行您的查询,以便您了解结果错误的原因。基本上,作为列表条目给出的变量通常由单例变量(已声明但未使用,即实例化)引起,如 svick 所述。