【发布时间】:2017-11-04 22:42:03
【问题描述】:
我正在做一个项目,我陷入了需要比较两个列表并返回如果列表中的至少一个成员在另一个列表中的情况。非常简单,但列表可能不仅包含数字,还包含数字范围。类似于:[1,3,range(5,10),25]
我认为我的主要问题是迭代列表,因为它仅在第一个列表成员与原子匹配时才返回 true。这是我的比较代码:
findin(E,[H|T]) :-
E == H ;
(H == range(X,Y), E \== range(Xe,Ye), between(X,Y,E)) ;
(E == range(Xe,Ye), H \== range(X,Y), between(Xe,Ye,H)) ;
(E == range(Xe,Ye), H == range(X,Y), (between(X,Y,Xe) ; between(Xe,Ye,X))) ,
findin(E,T).
以及调用 findin/2 函数的代码:
find([Ha|Ta],[Hb|Tb]) :-
findin(Ha,[Hb|Tb]),
find(Ta,[Hb|Tb]).
我错过了什么?另外,对于从 find/2 函数迭代 A 和 B 列表有什么想法吗?
【问题讨论】:
-
=表示统一变量,==比较它们,在序言中他们将“range(X,Y)”称为谓词/2 而不是函数,因此它们不会返回值。 -
首先,这个列表是排序的,还是没有?我问是因为该示例已排序。
-
第二件事...在粘贴代码之前,检查它是否被正确复制。您在查找谓词的第二行没有“)”符号。接下来是使用标准库中使用的命名。我不会推荐它。
标签: list prolog range comparison