1

我想了解这段代码对于带有 list 列表的 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).

谢谢你的帮助

4

1 回答 1

3

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

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

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

计算投影(,表或表,选择器,结果):-
    地图列表(生成投影(表格或表格/选择器),
            结果)。

列表也是如此Result,但查询需要一个形式的术语_/_

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

于 2019-02-23T19:44:38.120 回答