我是Prolog的新手(来自C ++),并且无法理解使用列表作为参数。特别是,我想知道如何解释列表只有一个元素(尾部是“空”)的情况。为什么我不能将[L]作为参数单独使用?为什么必须明确包含尾部?
/** Trying to print out the head of the list */
writeList([L|_]) :- write(L). /** Works fine */
writeList([L]) :- write(L). /** Doesn't work. Will return false, but why? */
writeList([L]) :- write([L]). /** I thought I'd try this to see if it was a
problem with write(), but this returns false as well. */
我提出的唯一解决方案(不在“: - ”之后创建测试)是:
writeList([L|[]]) :- write(L).
但是必须指定尾部是[]似乎有点混乱。有没有更清洁的方法呢?
对不起,如果这个问题非常愚蠢 - 我试图找到这个(非常基本的)问题的答案,但我怀疑我的基本理解存在问题。
答案 0 :(得分:4)
符号[X|Y]
是指第一个元素为X
且尾部为Y
的列表。
下划线_
是一个匿名变量,意味着任何术语。在这种情况下,这不是你想要的。
单元素列表的尾部为空,因此Y
绑定到空列表[]
,然后符号为:[X|[]]
以类似的方式,对于双元素列表:[X,Y|[]]
点击this Prolog Lists tutorial了解有关此主题的更多信息。