gpt4 book ai didi

list - 到达序言中的列表末尾

转载 作者:行者123 更新时间:2023-12-04 17:05:47 25 4
gpt4 key购买 nike

我被问到了一个问题:

Define a predicate ordered/1, which checks if a list of integers is correctly in ascending order. For example, the goal ordered([1,3,7,11]) should succeed, as should the goal ordered([1,3,3,7]), whereas the goal ordered([1,7,3,9]) should fail.



到目前为止,我有这个:
ordered([]).    
ordered([N, M|Ns]):-
append(M, Ns, Tail),
ordered(Tail),
N =< M.

但它在每个列表上都失败了。

我推断它失败的原因是因为它到达列表中的结束编号,然后尝试将该编号与空列表进行比较。显然这失败了,因为您无法将整数与空列表进行比较。即使你可以并且它返回 0对于空列表,它仍然会返回 false,因为该数字会大于 0 , 不小于。

我找不到解决方案......有什么想法吗?谢谢,乔恩。

编辑

所以,一些稍微修改的代码:
ordered([]).
ordered([N]):-
N >= 0.
ordered([N, M|Ns]):-
append(M, Ns, Tail),
ordered(Tail),
N =< M.

这现在适用于 ordered([1]) ,但更大的列表仍然无法正确运行。

我应该包括类似 ordered([N, M|Ns]) 的内容吗?在定义中?

最佳答案

(假设这是作业,我犹豫给出一个完整的解决方案)。

查看您的代码,尝试找出它如何统一 ?- ordered([1]).用心运行这个查询(或使用 trace/0),看看它做了什么,一步一步,以及它如何计算结果。

另外,在考虑序言时,请尽量不要“返回一个值”。 Prolog 谓词不返回任何内容。

关于list - 到达序言中的列表末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1334337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com