gpt4 book ai didi

prolog - 找到各种谓词的最小值

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

我想找到从 main 谓词调用的所有排列的最小值。为简单起见,我删除了整个代码,假设我只想找到所有排列的头元素的最小值

appendlist([], X, X).
appendlist([T|H], X, [T|L]) :- appendlist(H, X, L).

permutation([], []).
permutation([X], [X]) :-!.
permutation([T|H], X) :- permutation(H, H1), appendlist(L1, L2, H1), appendlist(L1, [T], X1), appendlist(X1, L2, X).

%min(X, A, B) X is the minimum of A, B
min(X, X, Y) :- X =< Y.
min(Y, X, Y) :- Y < X.

solve([Head|Rest], Head):-
writeln([Head|Rest]).

main :-
Sort = [1, 2, 3],
PrvAns is 1000,
permutation(Sort, X),
solve(X, Here),
min(Ans, Here, PrvAns),
writeln(Ans),
PrvAns = Ans,
!, fail;
true,
writeln(PrvAns).

我想计算每个排列的最小值。现在,permute 工作正常,您可以看到 solve 打印所有排列,甚至正确返回第一个值 Head,但是 PrvAns = Ans 是错误的。

预期输出 PrvAns:1

最佳答案

如果我没有正确理解(并告诉我,这样我可以帮助你),我很抱歉,但是,你的意思是这样的?

    findMinHead(X,Z):-
findall( Y, ( permutation(X,[Y|_]) ), Z1 ),
min_list(Z1,Z).

在这个谓词中,我们找到所有 Y 值,其中 Y 是 X 排列的头部,将所有这些值放在一个包中,然后找到最小值。

关于prolog - 找到各种谓词的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46494553/

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