如果列表中没有元素,则问题要求我们对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,有什么方法可以解决这个问题吗?
答案 0 :(得分:2)
由于这是家庭作业,我只会给你一些建议:
对于您要执行的操作,您不应在第二个和第三个子句中实例化M,直到递归步骤。
也就是说,您不必放置M is A
和M 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).
这是我编辑过的答案,现在可以正常使用。