2012-11-15 125 views
1

試圖找出如何爲列表創建「成員」函數。到目前爲止,我已經創建了這個,但是我沒有接近正確的答案。Prolog成員函數列表


spec([system001,hard_drive(50)]). 
spec([system002,hard_drive(150)]). 

list1(Component):- 
    spec([Component,X|Y]). 

which_system(Component, Component). 

which_system(Component):- 
    list1(Component), 
    which_system(X, Component). 

當我鍵入which_system(system001). 它的工作原理,但是當我把which_system(hard_drive(50)). 它不會在所有的工作......我不知道如何使它找到hard_drive(50)。

我希望有人可以幫助...

謝謝。

+2

請不要在您的問題得到解答後摧毀您的問題。這個網站的重點是針對較老的問題,以幫助具有類似問題的新人。 –

+0

@ user1726910:改善問題的格式化對他人甚至是禮貌。 – false

回答

3

你這樣做複雜得多,需要

which_system(Component, System) :- 
    spec([System|Components]), member(Component, Components). 

這工作也如果你在一個系統中有更多的組件,例如spec([system001, hard_drive(50), hard_drive(100)]).

?- which_system(hard_drive(50), S). 

將實例S指向system001。

+0

哦,對我來說這樣做更爲複雜。感謝您解決這個問題,現在它確實可行,但是在使用「which_system(hard_drive(50)」)方面還是有可能的方法,而不是使用額外的S: 。謝謝你的方式 – user1726910

+0

true/false。更合適的名稱是exists_system(hard_drive(50))。無論如何,Prolog支持具有相同名稱和不同參數個數的謂詞,只要放下什麼不感興趣的東西即可。'which_system(Component): - spec([ _ |組件]),成員(組件,組件)。「 – CapelliC

+0

謝謝,你一直很有幫助!:) – user1726910