gpt4 book ai didi

prolog - 我怎样才能以正确的方式得到这个简单的 Prolog 谓词 "return"?

转载 作者:行者123 更新时间:2023-12-02 04:34:04 24 4
gpt4 key购买 nike

所以我正在学习Prolog。我需要编写一个谓词来查找整数列表的最小/最大值。例如,查询 minmaxArray([4,-1,5,4,1,2,3,-2],X,Y) 将返回 X = -2 Y = 5。这是我到目前为止所得到的:

    %min/max element of a 1 item list is that item.

minmaxArray([X], X, X).

%when there is only 2 items, put the smaller element in A and the
%larger element in B

minmaxArray([X,Y], A, B) :- mymin(X,Y,Min),
A is Min, mymax(X,Y,Max), B is Max.

%when there is more than two items make a recursive call to find the min/max
%of the rest of the list.

minmaxArray([X,Y|T], A, B) :- minmaxArray([Y|T], M, K),
mymin(X,M,Temp), A is Temp, mymax(X,K,Temp2), B is Temp2.

假设 mymin 和 mymax 谓词正常工作。它们返回 2 个数字的最小值和最大值。

这里的问题是,例如,当我查询 minmaxArray([4,-1,5],X,Y) 时,它返回 X = -1 Y = 5,然后再次返回 X = -1 Y = 5。我知道这一定是因为它满足了递归调用的第二个条件。我只希望它返回一次 X = -1 Y = 5 。我尝试用以下内容替换条件 3:

minmaxArray([X,Y,_|T], A, B) :- minmaxArray([Y,_|T], M, K), 
mymin(X,M,Temp), A is Temp, mymax(X,K,Temp2), B is Temp2.

但这会使程序崩溃。我可以做什么来解决这个问题?

注意:我知道我可能没有正确使用术语,因为在应该是规则时说返回并说谓词等,所以我提前道歉。

最佳答案

看来你的代码可以更简单。这个谓词完成了所有需要的事情,并尝试展示如何使用一些标准构造(if/then/else)

minmaxArray([X], X, X).
minmaxArray([X|R], Min, Max) :-
minmaxArray(R, Tmin, Tmax),
( X < Tmin -> Min = X ; Min = Tmin ), % or mymin(X,Tmin,Min)
( X > Tmax -> Max = X ; Max = Tmax ).

关于prolog - 我怎样才能以正确的方式得到这个简单的 Prolog 谓词 "return"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22384882/

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