我对 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)
但必须指定尾部是[],似乎有点乱。有没有更干净的方法来做到这一点?
抱歉,如果这个问题非常愚蠢——我试图找到这个(非常基本)问题的答案,但我怀疑我的基本理解存在问题。
该符号指的是第一个元素为、尾部为 的[X|Y]列表。XY
下划线_是匿名变量,表示任何术语。在这种情况下,这不是您想要的。
单元素列表有一个空尾部,因此Y绑定到一个空列表[],则表示法为:[X|[]]
以类似的方式,对于二元素列表:[X,Y|[]]
查看此 Prolog 列表教程以了解有关此主题的更多信息。
| 归档时间: |
|
| 查看次数: |
9968 次 |
| 最近记录: |