gpt4 book ai didi

list - Prolog 在列表中查找第 K 个元素

转载 作者:行者123 更新时间:2023-12-04 00:44:27 25 4
gpt4 key购买 nike

我正在尝试在 prolog 中编写一个谓词来查找列表中的第 K 个元素。示例:

?- element_at(X,[a,b,c,d,e],3).
X = c

我的代码如下

k_ele(X,[X|_],1).
k_ele(X,[_|T],Y) :- Y > 1,Y is Y - 1, k_ele(X,T,Y).

但是没有用,我在网上找到了解决方案

element_at(X,[X|_],1).
element_at(X,[_|L],K) :- K > 1, K1 is K - 1, element_at(X,L,K1).

这与我的逻辑相同,只是他们使用了一个额外的变量 K1。

我的代码有什么问题,为什么我需要另一个变量?

最佳答案

您的代码不起作用的原因是统一不是任务。当你说

Y is Y - 1

您正试图将 Y 的值与 Y-1 的值统一,这在数学上是不可能的。这与说 4 是 31001 是 1000 大致相同。整个条件不成立,导致无法在列表中找到该元素。

您在网上找到的固定解决方案引入了一个单独的变量K1,它与K - 1 统一。这是非常可行的:K1 获取 K-1 求值的值,条件成功,子句进入递归调用部分。

关于list - Prolog 在列表中查找第 K 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19714660/

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