Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List Prolog评估两个列表如何相互比较_List_Prolog - Fatal编程技术网

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