Prolog - 使用 maplist 应用参数

Prolog - apply arguments with maplist

我想了解这段用于带有列表列表的 maplist 的自定义谓词的代码可能有什么错误:

generateProjection(TableOrTables/Selectors, Row, Result) :- 
    writeln(kiki),
    writeln(TableOrTables),
    writeln(Selectors),
    writeln(Row),
    Result = 1/2.

compute_projection(Rows, TableOrTables, Selectors, Result) :- 
    writeln(hello),
    writeln(Rows),
    writeln(Selectors),
    maplist(
        generateProjection(TableOrTables/Selectors),
        Rows,
        Result
    ).

此查询有效:

generateProjection(foo/[foo/bar, foo/baz], [1, 2], Z).

而这个失败了:

compute_projection([[1, 2], [3, 4]], foo, [foo/bar, foo/baz], _4552/_4554).

感谢您的帮助

让我们看看您的第二个查询:

?- compute_projection([[1,2],[3,4]], foo, [foo/bar,foo/baz], _A/_B).

maplist/3 关联两个 列表 。 现在让我们再看看谓词定义:

compute_projection(Rows, TableOrTables, Selectors, Result) :- 
    maplist(generateProjection(TableOrTables/Selectors),
            Rows,
            Result).

所以 Result 是一个列表,但查询需要 _/_.

形式的术语

这就是您的查询无法成功的原因。