2013-06-20 111 views
1

我對Prolog相當陌生,我試圖讓我的頭繞着列表的概念。我試圖一個例子是:將原子添加到列表序言

value(a, 1). 
value(b, 2). 
value(a, 3). 
value(a, 4). 
value(c, 3). 

我想創建,當在查詢find(a, List)結果謂詞:List = [1, 3, 4].

它只是簡單地越過所有的事實,並增加了匹配的人的名單。

我試過這樣的事情。但它似乎並不正確:

find(X, List):- 
    value(X, D), append([D], [], [List|Rest]), find(X, [Head|List]). 

對不起,有這樣一個基本問題。任何指導表示讚賞。

注:我打算通過添加列表中的所有值來擴展該程序。

+0

要對結果列表進行求和,只需要使用'sumlist(List,Sum)'內置的謂詞。 – lurker

回答

3

看看這裏:http://www.swi-prolog.org/pldoc/doc_for?object=findall/3

我相信你的努力已經存在做,試試這個:

?- findall(X,value(a,X),List). 

我沒有安裝這臺機器上的Prolog所以我不能完美測試它,但這應該讓你找到你想要的。

編輯:抱歉設法進入swi,並意識到我有2個參數相反,現在看到更新的代碼。也測試了它和它的作品:-)

編輯2:按照上面的評論,你可以收集其比賽「A」的價值觀,讓你可以結合到這個總和:

?- findall(X, value(a,X), List), sumlist(List, Sum). 

- Ken