返回最小值或小于特定数字-prolog

返回最小值或小于特定数字-prolog,prolog,Prolog,这个问题要求我们编写序言,如果列表中没有元素 小于A的L,当M为A时满足;否则,当M 是列表L的最小值 minLessThan([],A,A). minLessThan([H|T], A, M) :- H >= A, M is A, minLessThan(T, A, M). minLessThan([H|T], A, M) :- H < A, M is H, minLessThan(T, A, M). minLessThan([],A,A)。

这个问题要求我们编写序言,如果列表中没有元素 小于A的L,当M为A时满足;否则,当M 是列表L的最小值

minLessThan([],A,A).
minLessThan([H|T], A, M) :-
   H >= A,
   M is A,
   minLessThan(T, A, M).
minLessThan([H|T], A, M) :-
   H < A,
   M is H,
   minLessThan(T, A, M).
minLessThan([],A,A)。
minLessThan([H | T],A,M):-
H>=A,
M是一个,
minLessThan(T,A,M)。
minLessThan([H | T],A,M):-
H

现在,我的结果对于句子的第一部分是有效的,但是当M是列表L的最小值时,它会返回false,我假设问题发生在列表L为空时,它返回A,有什么办法解决这个问题吗?

因为这是我的家庭作业,我只想给你一些建议:

对于您试图做的事情,在递归步骤之前,不应该在第二和第三个子句中实例化M。 也就是说,您不必把
M是A
M是H
放在一起,因为M将在基本情况下被实例化(第一个子句)

另外,第三个子句中的递归调用应该使用
H
而不是
A
作为第二个参数,因为您发现了一个小于当前最小值的项

请注意,
minLessThan
的第二个参数可以读取为“当前找到的最小值”,因此您应该调用提供一些初始值的过程,否则将发生实例化错误。

minLessThan([],A,A)。
minLessThan([],A,A).

minLessThan([H|T], A, M) :-
    H >= A,
    minLessThan(T, A, M).

minLessThan([H|T], A, M) :-
    H < A,
    minLessThan(T, H, M).
minLessThan([H | T],A,M):- H>=A, minLessThan(T,A,M)。 minLessThan([H | T],A,M):- H

这是我编辑过的答案,目前效果不错。

Thx,我刚刚理解了你在答案中的意思。我是多么愚蠢,没有发现第二个参数的用法。Thx的帮助。顺便说一句,我应该张贴更正的代码在这里?第一次在这里使用。如果你想得到关于它的补充建议,你可以。或者,如果您想让我们检查一下,告诉您是否可以:)