在Prolog中将元素添加到列表开头

4
我该如何在Prolog中将元素附加到列表的开头?最终结果应该像这样调用:
pushFront(8, [3, 1], NewList). % NewList is now [8, 3, 1].

我尝试按照以下方式实现它:
pushFront(Item, [], [Item|_]). %Problematic
pushFront(Item, [OldDequeH|OldDequeT], NewDeque) :-
    leftPush(OldDequeH, OldDequeT, [Item|NewDeque]).

但它不起作用,我实在没有想法了。有人能描述一下我的实现哪里出了问题,以及需要哪些更改才能使其正常工作吗?

1个回答

8

要在列表的开头添加元素,只需使用列表表示法:

pushFront(Item, List, [Item|List]).

列表表示法在内部使用cons函数符号(.),因此列表[b,c,d]只是'.'(b,'.'(c, '.'(d, []))) 的语法糖。
这种表示法允许您通过包装另一个cons函数符号来在前面添加项目,即如果您想将项目a添加到列表L的前面,则可以包装一个'.'(a, L),通常我们将其简写为[a|L]

1
哇!这真的太简单了...有时候我真是个白痴,顺便说一下,谢谢 :) - MathuSum Mut
问题:为什么您将cons称为函数对象而不是函数? - MathuSum Mut
1
@MathuSumMut:在Prolog中没有函数(除非您考虑在“is”的右侧使用的函数),您有用户过程和系统谓词。但是在这里,您只是使用一个结构(列表),对于该结构Prolog有两种表示方法(列表表示法,如[item,item | TailItems]和_cons_表示法(点函数符号.)。您可以使用列表表示法或使用点函数符号的_cons_表示法来构建列表(结构)。 - gusbro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接