[英]Intersection of Two Lists of Tuples in Prolog
我正在嘗試使用intersection()
函數在Prolog中找到兩個列表的intersection()
。 不幸的是,我的代碼給出了不良的結果。
這是我所擁有的:
RESULTA = [ ('10:00 am - 11:15 am', 'TR'), ('6:00 pm - 8:50 pm', 'T'), ('6:00 pm - 8:50 pm', 'R'), ('6:00 pm - 8:50 pm', 'M')].
RESULTB = [ ('6:00 pm - 8:50 pm', 'R'), ('3:00 pm - 3:50 pm', 'TR')].
intersection(RESULTA, RESULTB, AB).
所需的輸出是('6:00 pm - 8:50 pm', 'R')
但是,代碼返回RESULTA = AB, AB = [].
有誰知道如何解決此問題?
編輯
RESULTA和RESULTB實際上是從bagof()操作生成的。 我的實際代碼是:
1 ?- bagof((TIME, DAYS), COURSE^teaches_at('Dr. J. Leidig', COURSE, TIME, DAYS), RESULTA).
RESULTA = [ ('10:00 am - 11:15 am', 'TR'), ('6:00 pm - 8:50 pm', 'T'), ('6:00 pm - 8:50 pm', 'R'), ('6:00 pm - 8:50 pm', 'M')].
2 ?- bagof((TIME, DAYS), COURSE^teaches_at('Dr. El-Said', COURSE, TIME, DAYS), RESULTB).
RESULTB = [ ('6:00 pm - 8:50 pm', 'R'), ('3:00 pm - 3:50 pm', 'TR')
對困惑感到抱歉。
您問題中的代碼實際上是對Prolog的查詢。
有3個不同的查詢:每個查詢以一個句點結尾。 這三個查詢都是完全獨立的,即使它們共享相同名稱的變量也是如此。
要執行您想要的操作,只需將句點更改為逗號即可:
RESULTA = [ ('10:00 am - 11:15 am', 'TR'), ('6:00 pm - 8:50 pm', 'T'), ('6:00 pm - 8:50 pm', 'R'), ('6:00 pm - 8:50 pm', 'M')],
RESULTB = [ ('6:00 pm - 8:50 pm', 'R'), ('3:00 pm - 3:50 pm', 'TR')],
intersection(RESULTA, RESULTB, AB).
問題更新后更新:
bagof((TIME, DAYS), COURSE^teaches_at('Dr. J. Leidig', COURSE, TIME, DAYS), RESULTA),
bagof((TIME, DAYS), COURSE^teaches_at('Dr. El-Said', COURSE, TIME, DAYS), RESULTB),
intersection(RESULTA, RESULTB, AB).
您必須在規則中使用該變量,例如
test(AB) :-
RESULTA = [ ('10:00 am - 11:15 am', 'TR'), ('6:00 pm - 8:50 pm', 'T'), ('6:00 pm - 8:50 pm', 'R'), ('6:00 pm - 8:50 pm', 'M')],
RESULTB = [ ('6:00 pm - 8:50 pm', 'R'), ('3:00 pm - 3:50 pm', 'TR')],
intersection(RESULTA, RESULTB, AB).
然后查閱文件。 你會得到
?- test(AB).
AB = [ ('6:00 pm - 8:50 pm', 'R')].
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.