2012-12-18 23 views
1

我正在編寫子集函數,並且我成功地這樣做了。 這裏是我的功能,實現成員函數:序言中的子集函數

member(X, [ X | T ]). 
member(X, [ _ | T ]) :- member(X, T). 

subset([], _). 
subset([H|T1], T2) :- 
    member(H, T2), 
    subset(T1, T2). 
subset([H1|T1], [H2|T2]) :- 
    \+ member(H1, T2), 
    subset([H1|T1], T2). 

我的問題是,有沒有更好的方式來寫當然使用成員函數此功能。

回答

2

subset/3的第三項沒有意義,我認爲應該刪除它。 如果H1不是T2的成員,那麼遞歸調用subset([H1|T1], T2)顯然也不會成功。

除此之外,前兩個條款似乎是要走的路。

+0

感謝您的支持。 – Stranger