首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prolog初学者

Prolog初学者
EN

Stack Overflow用户
提问于 2009-12-04 02:18:54
回答 2查看 266关注 0票数 2

我正在尝试使谓词对于列表X和Y,如果X和Y是相同的列表,则rmlast为真,除了Y有多一个元素的事实。所以是1或3,2。

代码语言:javascript
复制
rmlast([], [_]). :- true.
rmlast([X|xtail], [Y|ytail]) :- rmlast(xtail,ytail), X is Y.

但是,对于除基本情况之外的任何情况,这都会产生错误的结果。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-12-04 02:23:08

您的代码无法工作,因为xtailytail是用小写字母编写的,因此不是变量。这是可行的:

代码语言:javascript
复制
rmlast([], [_]).
rmlast([X|T1], [X|T2]) :- rmlast(T1, T2).

以外

如您所见,在这种情况下,不需要使用变量XY:只需在适当的位置使用X两次。

  • 您可以这样写:

rmlast([],_)。:-真的。

这与以下内容相同:

rmlast([],_)。:-真的。

如您所见,第二条语句没有添加任何内容,因此可以安全地删除。

票数 6
EN

Stack Overflow用户

发布于 2016-04-09 07:35:45

代码语言:javascript
复制
rmlast([H],[]).
rmlast([H1|Tail1],[H2|Tail2]):-
           H1 = H2,rmlast(Tail1,Tail2).

不要使用“is”,它不是逻辑运算符。它是一个赋值运算符。请改用'=‘。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1841835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档