【发布时间】:2015-11-29 21:39:32
【问题描述】:
我正在定义一个谓词min_in_list/2,它将找到列表中的最小值。如果列表中的元素少于 2 个,则程序应输出 "Error: There are not enough elements in the list" 并且如果列表中的元素不是数字,例如。 [2,a,3]。程序应输出"Error: The element is not a number"。我创建了一个谓词,它可以找到最小值并检查列表是否少于两个值,但是在检查列表的元素是否不是数字并输出错误消息时遇到问题
我的代码:
min_in_list([Min],_):- write('ERROR: List has fewer than two elements.').
min_in_list([],_):- write('ERROR: List has fewer than two elements.').
min_in_list([Min,_],Min).
min_in_list([H,K|T],M) :-
H =< K,
min_in_list([H|T],M).
min_in_list([H,K|T],M) :-
H > K,
min_in_list([K|T],M).
【问题讨论】:
-
元素少于2个,不应该是少于1个吗?一个元素的列表仍然有最小值...
-
不,我想要的谓词应该在只有一个元素或没有元素时输出错误消息。
-
您应该浏览 Prolog 的预定义谓词库。例如,有些谓词可以帮助您识别数字与原子。
-
你的意思可能不是真的
min_in_list([Min,_],Min).那意味着min_in_list([3,5], 3).是真的。