List Prolog评估两个列表如何相互比较
注:接近逻辑编程初学者 我需要比较两个整数列表,找出其中一个更大、更大或相等,还是两者都相等 例如:List Prolog评估两个列表如何相互比较,list,prolog,List,Prolog,注:接近逻辑编程初学者 我需要比较两个整数列表,找出其中一个更大、更大或相等,还是两者都相等 例如: compare_list([1, 2, 3], [1, 2, 4], C). C = greater, C = greater-equal. compare_list([1, 2, 3], [1, 2, 4], C). C = equal. 到目前为止,我能得到的最接近的是 compare_list([],[],_). compare_list([X|XS],[Y|YS],C):- X &
compare_list([1, 2, 3], [1, 2, 4], C).
C = greater,
C = greater-equal.
compare_list([1, 2, 3], [1, 2, 4], C).
C = equal.
到目前为止,我能得到的最接近的是
compare_list([],[],_).
compare_list([X|XS],[Y|YS],C):-
X > Y,
compare_list(XS,YS,C),
C = 'greater'.
compare_list([X|XS],[Y|YS],C):-
X >= Y,
compare_list(XS,YS,C),
C = 'greater-equal'.
compare_list([X|XS],[Y|YS],C):-
X == Y,
compare_list(XS,YS,C),
C = 'equal'.
现在,这显然不起作用,因为它总是比较每个列表的第一个元素,并查看C值是否适用于所有值。然而,我想不出一种方法使它按预期的方式工作
编辑:
值在列表中越早,它就越重要。所以[2,2]>[1,3]>[1,2]
小费将不胜感激。谢谢
编辑:
通过等待结束将C分配给任何对象来解决此问题。您可以在第一次出现不均衡时停止比较。如果你到达(两个)列表的末尾,这意味着列表是相等的。根据你对“更大”的定义,在你找到X>Y之后,没有必要继续递归。如果你到达递归的末尾(如chac所说),你就会知道这两个列表是相等的
为了得到“更大的相等”,你应该检查X不小于Y。你可能认为这是“如果X小于Y,那么就失败”。看看。在您的解决方案中,您使用了
(>)/2
、(>=)/2
和(==)/2
。前两个将在比较之前将其参数作为算术表达式进行求值。和(==)/2
将根据术语顺序进行比较。您必须决定购买其中一种或另一种订单。但你不能把它们混在一起
第二句话是,你也会因此需要一些“更少”的东西
如果两个元素已经比较为
(),下面的代码将检查两个列表是否相等
is_equal([],[]).
is_equal([H1|T1],[H2|T2]):- H1=:=H2,is_equal(T1,T2).
根据您的说法,当一个列表大于另一个列表时,列表中的每个值越左边越重要。因此[2,0,0]大于[1,2,3],后者大于[1,2,2]。
is_equal([],[]).
is_equal([H1|T1],[H2|T2]):- H1=:=H2,is_equal(T1,T2).