2013-09-23 67 views
1

如Prolog的謂詞關於列表操作

car(toyota,[sedan,5_seater,head_rest]). 
car(nissan,[4_seater,sedan,2_door,head_rest,blue]). 
car(peugeot,[head_rest,sedan,5_seater,sun_roof]). 

如何寫Prolog的謂詞items(A, X, Y)這是真的,如果A是列表車包含在X的所有部分,但不包含任何的在Y的部分。

真的希望有人能幫助我。提前致謝!

回答

0

看到subtract/3

items(A, X, Y) :- subtract(X, Y, A). 

,如果你把你的名單排序(即像套),ord_subtract/3是一個更好的選擇

編輯:很抱歉的無用的答案,在這裏是修改後的一個。 相關列表處理謂詞是intersection/3,而setof/3是一個強大的列表'構造函數'。

項/ 3可以寫成這樣

items(A, Present, Miss) :- 
    setof(Car, Parts^(car(Car, Parts), 
       intersection(Parts, Present, Present), 
       intersection(Parts, Miss, [])), A). 

,因爲你的數據庫是有點微薄,爲了測試我進入

?- items(L,[sedan],[blue]). 
L = [peugeot, toyota]. 
+0

我在序言新手。你能否詳細說一下先生... – Man

+0

哎呀。你是對的,我沒有正確地閱讀你的問題,我的答案完全錯過了......現在編輯...... – CapelliC