Prolog如何向变量声明列表

时间:2015-11-05 16:27:49

标签: list prolog

在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。

1 个答案:

答案 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).