gpt4 book ai didi

prolog - 在 PROLOG 的列表中查找大于某个数字的元素数

转载 作者:行者123 更新时间:2023-12-01 14:46:44 25 4
gpt4 key购买 nike

您好,感谢您花时间阅读这个问题。我有以下问题:

给定一个返回大于 X 的数字数量的列表示例:

更大的 (4, [1,2,3,4,5,6], N) 结果。 N = 2我的代码是:

greater(0,[],0):-!, fail.
greater(N,[N],1).
greater(N,[H|Q],X):-H>N,greater(Q,N,X),X is X+1.

问题是 PROLOG 只返回 False 而不是 X 的值。

我希望你能向我解释我做错了什么,我提前感谢你

最佳答案

如果没有成功的调用路径,那么在 Prolog 中谓词调用就会失败,那么下面的谓词子句就没有用了。您可以将其删除。

greater(0,[],0):-!, fail.

您的下一个子句是您的递归基本情况,并且表述不正确:

greater(N,[N],1).

即使它违反了您要对列表中大于 N 的元素进行计数的条件,它也会成功. N不大于 N .如果你想要这个子句应该是什么样子 greater(N, [X], 1).成功吗?

在你的递归子句中,你有一个问题:

greater(N,[H|Q],X):-H>N,greater(Q,N,X),X is X+1.

X is X+1总是失败,因为 X 的值永远不可能与值 X+1 相同.也就是说,不存在等于自身加一的数。你需要使用一个辅助变量:

greater(N,[H|Q],X):-H>N,greater(Q,N,X1),X is X1+1.

最后,您错过了 H =< N 时的情况:

greater(N,[H|Q],X):-H=<N, ....

这个子句应该是什么样的?

关于prolog - 在 PROLOG 的列表中查找大于某个数字的元素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52920477/

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