我想找到从main
谓词调用的所有排列的最小值。为简单起见,我删除了我的整个代码,假设我只想找到所有排列最少的head元素。
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
答案 0 :(得分:0)
对不起,如果我听不懂(告诉我,这样我可以帮助您),但是,您的意思是这样的吗?
findMinHead(X,Z):-
findall( Y, ( permutation(X,[Y|_]) ), Z1 ),
min_list(Z1,Z).
在此谓词中,我们找到所有Y值,其中Y是X的排列的头,将所有这些值放在袋子中,然后找到最小值。