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

时间:2012-08-15 09:06:20

标签: prolog

如果列表中没有元素,则问题要求我们对Prolog进行编码 当M为A时,满足小于A的L; 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).

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

2 个答案:

答案 0 :(得分:2)

由于这是家庭作业,我只会给你一些建议:

对于您要执行的操作,您不应在第二个和第三个子句中实例化M,直到递归步骤。 也就是说,您不必放置M is AM is H,因为M将在基本情况(第一个子句)中实例化。

此外,第三个子句中的递归调用应使用H而不是A作为第二个参数,因为您找到的项目小于当前最小值。

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

答案 1 :(得分:0)

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).

这是我编辑过的答案,现在可以正常使用。