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
是一个列表,但查询需要 _/_
.
形式的术语
这就是您的查询无法成功的原因。
我想了解这段用于带有列表列表的 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
是一个列表,但查询需要 _/_
.
这就是您的查询无法成功的原因。