gpt4 book ai didi

lambda - 序言:迭代

转载 作者:行者123 更新时间:2023-12-01 15:28:04 27 4
gpt4 key购买 nike

晚上好我有一个简单的问题,我警告你我是序言的新手。假设有三个相同大小的列表,每个列表仅包含 1、0 或 -1。我想验证对于所有 i,在三个列表的第 i 个元素中,只有一个非零。

此代码针对固定的 i 执行此操作:

:- use_module(library(clpfd)).

compat1(V1,V2,V3,I) :-
length(V1,G),
nth1(I,V1,X),
nth1(I,V2,Y),
nth1(I,V3,Z),
W is X*X+Y*Y+Z*Z,
W is 1,
I in 1..G.

我怎么知道“对于所有我,compat1(V1,V2,V3,I)”?我试图定义

compat2(V1,V2,V3,1) :- compat1(V1,V2,V3,1).
compat2(V1,V2,V3,K) :- compat2(V1,V2,V3,J), compat1(V1,V2,V3,K), K is J+1.

这样我就可以用我感兴趣的 K=最大值来调用它。但是 compat2 不起作用:在“;”之后给出 true,然后无限期地运行。

谢谢!

最佳答案

一些评论:混合 library(clpfd)(is)/2 大多不是一个好主意。您可以用 X #= Y + 1 代替 X is Y + 1,效率几乎相同(在 SWI 中),但通用性更高。

您感兴趣的关系与三个列表的第 i 个元素相关。也就是说,我们可以这样写: maplist(r, Xs, Ys, Zs) 其中 r/3 是你感兴趣的关系。所以我们必须定义 r(X,Y,Z).

abs(X)+abs(Y)+abs(Z) #= 1 呢?

library(lambda)你可以把它全部放在一行中:

maplist(\X^Y^Z^(abs(X)+abs(Y)+abs(Z) #= 1), Xs, Ys, Zs).

关于lambda - 序言:迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7151278/

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