2015-11-05 73 views
0

在Prolog中,我很努力地理解如何將列表的列表綁定到變量。例如,說我有謂語makeList(我不知道怎麼寫),那麼我應該能夠類型:Prolog如何向變量聲明一個列表

makeList([[0, 0], [1, 0]]). 

現在我想請參閱[[0,0],[ 1,0]]在具有可變,ListList,像另一個謂詞:

predicateThatDoesSomething(ListList) :- write(ListList). 

預期輸出:

[[0, 0], [1, 0]] 

顯然predicateThatDoesSomething()知道有關命名ListList已經是可變的。但是,如何使謂詞makeList()?我希望能夠輸入makeList([[ANY,LIST,IN,HERE],[ANOTHER,LIST]]],並且以ListList爲例。

回答

1

您必須編寫合併兩個列表中的謂語,所以這個謂詞必須的東西,如統一:

makeList(List1, List2, [List1, List2]). 

定義這個謂詞之後你knowled基地,你可以詢問序言引擎問:

makeList([1,2],[2,4],D). 

,你會得到:D = [[1, 2], [2, 4]]

爲了使其他謂詞(在你的KB定義)

predicateThatDoesSomething(ListList) :- write(ListList). 

知道結果(輸出參數,統一結果),你必須在邏輯上and的語句。所以你必須問:

makeList([1,2],[2,4],D) , predicateThatDoesSomething(D). 
+0

感謝您的幫助!那就是我一直在尋找的! – mallux