在Prolog中,我很难理解如何将列表列表绑定到变量。例如,假设我有谓词makeList(我不知道怎么写),那么我应该可以输入:
makeList([[0, 0], [1, 0]]).
现在我想在带有变量ListList的另一个谓词中引用[[0,0],[1,0]],如:
predicateThatDoesSomething(ListList) :- write(ListList).
预期产出:
[[0, 0], [1, 0]]
显然,predicateThatDoesSomething()已经知道名为ListList的变量。但是如何创建谓词makeList()?我希望能够键入makeList([[ANY,LIST,IN,HERE],[ANOTHER,LIST]])并将其作为ListList。
答案 0 :(得分:1)
你必须编写一个合并两个列表的谓词,因此这个谓词必须与以下内容统一:
makeList(List1, List2, [List1, List2]).
在你知道的基础中定义了这个谓词后,你可以询问prolog引擎:
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).