Return 来自在两个列表 Prolog 中匹配的项目的列表
Return a list from items matching in two lists Prolog
我是 Prolog 的新手,我有这个:
compare_list(Hours1, Hours2, Matching)
我想return将列表Hours1和Hours2之间的匹配时间放入列表Matching
我可以获取匹配项但无法构建匹配项列表。
Hours1 may be like: [1,2,3],
Hours2 may be like: [2,3],
So from this:
Matching Hours should be: [2,3]
不胜感激。
我已经实现了 Vennik 的建议,它非常接近我想要的。
Hours1 的结果:[2,3,5],Hours2:[2,5]
给出以下内容:
Matching = [2, 5] ;
Matching = [2] ;
Matching = [5] ;
Matching = []
是否可以只有第一个集合而没有产生其他三个结果?
试试这个:
compare_list([], _, []).
compare_list([Hour | Hours1], Hours2, [Hour | Matching]) :-
member(Hour, Hours2),
compare_list(Hours1, Hours2, Matching).
compare_list([_ | Hours1], Hours2, Matching) :-
compare_list(Hours1, Hours2, Matching).
调用 compare_list([1,2,3], [1,2], X), !.
将导致 X = [1,2]
。
您可能需要考虑相关问题 intersection and union of 2 lists。
特别是,我对上述问题的 logically pure answer 可能对您很有用,因为它比上面 @vennik 发布的代码提供 多重优势:
- 谓词按照关系应有的方式运行。 "Multi-directional."
- 它们是单调的,并且在任意泛化/专业化后保持健全。
- 他们以利益关系的完整性为目标,在需要时创建选择点。
- 它们是高效的,避免创建无用的选择点。
我知道那不是 pure...(或者不是 montone,如果你愿意)...但是,如果你不是 纯粹主义者,SWI-Prolog 给你谓词
intersection/3
你可以这样使用
intersection(Hours1, Hours2, Matching).
我是 Prolog 的新手,我有这个:
compare_list(Hours1, Hours2, Matching)
我想return将列表Hours1和Hours2之间的匹配时间放入列表Matching
我可以获取匹配项但无法构建匹配项列表。
Hours1 may be like: [1,2,3], Hours2 may be like: [2,3], So from this: Matching Hours should be: [2,3]
不胜感激。
我已经实现了 Vennik 的建议,它非常接近我想要的。 Hours1 的结果:[2,3,5],Hours2:[2,5] 给出以下内容:
Matching = [2, 5] ;
Matching = [2] ;
Matching = [5] ;
Matching = []
是否可以只有第一个集合而没有产生其他三个结果?
试试这个:
compare_list([], _, []).
compare_list([Hour | Hours1], Hours2, [Hour | Matching]) :-
member(Hour, Hours2),
compare_list(Hours1, Hours2, Matching).
compare_list([_ | Hours1], Hours2, Matching) :-
compare_list(Hours1, Hours2, Matching).
调用 compare_list([1,2,3], [1,2], X), !.
将导致 X = [1,2]
。
您可能需要考虑相关问题 intersection and union of 2 lists。
特别是,我对上述问题的 logically pure answer 可能对您很有用,因为它比上面 @vennik 发布的代码提供 多重优势:
- 谓词按照关系应有的方式运行。 "Multi-directional."
- 它们是单调的,并且在任意泛化/专业化后保持健全。
- 他们以利益关系的完整性为目标,在需要时创建选择点。
- 它们是高效的,避免创建无用的选择点。
我知道那不是 pure...(或者不是 montone,如果你愿意)...但是,如果你不是 纯粹主义者,SWI-Prolog 给你谓词
intersection/3
你可以这样使用
intersection(Hours1, Hours2, Matching).