检查 Prolog 中的单元素列表

unc*_*ive 4 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. */
Run Code Online (Sandbox Code Playgroud)

我想出的唯一解决方案(不在“:-”之后创建测试)是:

writeList([L|[]]) :- write(L).
Run Code Online (Sandbox Code Playgroud)

但必须指定尾部是[],似乎有点乱。有没有更干净的方法来做到这一点?

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

Jos*_*Sol 8

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

下划线_是匿名变量,表示任何术语。在这种情况下,这不是您想要的。

单元素列表有一个空尾部,因此Y绑定到一个空列表[],则表示法为:[X|[]]

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

查看此 Prolog 列表教程以了解有关此主题的更多信息。

  • 好答案!只是一个小补充:只需为一个元素列表编写“[X]”,为两个元素列表编写“[X,Y]”。 (5认同)