List 在Prolog中检查一个元素列表
我对Prolog(来自C++)非常陌生,在理解使用列表作为参数时遇到困难。特别是,我想知道如何解释列表只有一个元素(尾部为“空”)的情况。为什么不能将[L]本身作为参数?为什么必须明确包含尾部List 在Prolog中检查一个元素列表,list,prolog,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.
/** 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. */
我提出的唯一解决方案(不在“:-”)之后创建测试)是:
但必须指定尾部为[]似乎有点混乱。有没有更干净的方法
对不起,如果这个问题很傻的话——我试图找到这个(相当基本的)问题的答案,但我怀疑在我的基本理解中有问题。符号
[X | Y]
指的是一个列表,它的第一个元素是X
,尾部是Y
下划线是一个匿名变量,表示任何术语。这不是你想要的
一个元素列表有一个空的尾部,因此Y
被绑定到一个空列表[]
,那么符号是:[X |[]]
类似地,对于双元素列表:[X,Y |[]]
查看有关此主题的更多信息。谓词writeList([L]):-write(L)。
对我来说效果很好。我的目标是?-writeList([alice])。
。请记住,prolog目标要么成功,要么失败,它们不会返回真或假。我想我说的是错的(我回过头来,一直在做writeList(alice)),每次都不知怎么地忘记了括号)。看起来我的困惑只是因为一个愚蠢的错误——谢谢你的回答,这让我意识到。回答得好!只是一个小小的补充:只需为一个元素列表编写[X]
,为两个元素列表编写[X,Y]
。@mat这更干净了!。我真的习惯了这件事。谢谢
writeList([L|[]]) :- write(L).