检查Prolog中的单元素列表

时间:2016-04-24 06:39:47

标签: list prolog

我是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).

但是必须指定尾部是[]似乎有点混乱。有没有更清洁的方法呢?

对不起,如果这个问题非常愚蠢 - 我试图找到这个(非常基本的)问题的答案,但我怀疑我的基本理解存在问题。

1 个答案:

答案 0 :(得分:4)

符号[X|Y]是指第一个元素为X且尾部为Y的列表。

下划线_是一个匿名变量,意味着任何术语。在这种情况下,这不是你想要的。

单元素列表的尾部为空,因此Y绑定到空列表[],然后符号为:[X|[]]

以类似的方式,对于双元素列表:[X,Y|[]]

点击this Prolog Lists tutorial了解有关此主题的更多信息。