簡體   English   中英

列出序言中的交集

[英]lists intersection in prolog

我是Prolog的新手,我嘗試編寫5個列表並獲得它們之間的交集,我如何實現這一點,**列表將在文件中定義,因此不會從用戶輸入。

我看到許多資源,他們用兩個列表實現了它,並且如果我將列表作為用戶的查詢來實現,它也可以正常工作……但是當我嘗試在文件中預定義列表時,這是行不通的。


簡單描述我的項目的一部分,以進一步闡明...菜單將顯示,用戶將在季節,天氣狀況,場合中各選擇一個。...列表將列出適合的衣服

因此,例如,用戶選擇“冬季”季節,“多雨”天氣條件和“婚禮”場合列表

    rainy([take_umbrella, jacket,coat]).
winter([jacket,sweater,coat,take_umbrella]).
wedding ([take_umbrella,dress,jacket,coat]).

所以相交的結果是take_umbrella,jacket,coat

我希望我的想法很明確,並在此先感謝您:)

我嘗試在文件中預定義列表,這是可行的。 是的,您在文件中的列表不起作用? 我不知道。 我修復了您的錯誤,因為您的粘貼並非沒有錯誤,然后就可以了。

?- winter(Winter),
   rainy(Rainy),
   wedding(Wedding),
   intersection(Winter, Rainy, Winter_and_Rainy),
   intersection(Winter_and_Rainy, Wedding, Winter_and_Rainy_and_Wedding).
Winter = [jacket, sweater, coat, take_umbrella],
Rainy = [take_umbrella, jacket, coat],
Wedding = [take_umbrella, dress, jacket, coat],
Winter_and_Rainy = Winter_and_Rainy_and_Wedding, Winter_and_Rainy_and_Wedding = [jacket, coat, take_umbrella].

但是,如果不知道有多少個清單,您可以列出並減少清單。

?- % make some lists L1, L2, ..., Ln,
   foldl(intersection, [L1, L2, ..., Ln-1], Ln, Intersection).

冬天在多雨的婚禮上,您會減少:

?- winter(Winter), rainy(Rainy), wedding(Wedding),
   foldl(intersection, [Winter, Rainy], Wedding, Intersection).
Winter = [jacket, sweater, coat, take_umbrella],
Rainy = Intersection, Intersection = [take_umbrella, jacket, coat],
Wedding = [take_umbrella, dress, jacket, coat].

您看到元素的順序是變化,但是有問題嗎? 對我來說沒問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM