我是Prolog的新手,我有这个:
compare_list(Hours1, Hours2, Matching)
我想将列表Hours1和Hours2之间的匹配小时数返回到匹配列表
我可以获得匹配但不构建匹配列表。
小时1可能如下:[1,2,3], 小时2可能如下:[2,3], 所以从这个: 匹配时间应为:[2,3]
帮助将不胜感激。
我已经实施了Vennik所建议的内容,它非常接近我想要的内容。 小时1的结果:[2,3,5],小时2:[2,5] 提供以下内容:
Matching = [2, 5] ;
Matching = [2] ;
Matching = [5] ;
Matching = []
是否可以只生成第一组而不产生其他三个结果?
答案 0 :(得分:1)
您可能需要考虑相关问题intersection and union of 2 lists。
特别是,我的logically pure answer以上问题可能对您有用,因为它提供了多个优势而不是上面的@vennik发布的代码:
答案 1 :(得分:0)
试试这个:
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]
。
答案 2 :(得分:0)
我知道那不是纯 ...(或者不是 montone ,如果你愿意的话)...但是,如果你不是纯粹主义者,SWI-Prolog为您提供谓词
$bilder = glob( "../showcase/images/*.jpg" );
$seed = floor(time()/20);
srand($seed);
$random_image = $bilder[rand(0, count($bilder)-1)];
echo $random_image;
你可以这样使用
intersection/3