以下元谓词通常很有用。请注意,它不能被调用maplist//2
,因为它的扩展会与maplist/4
.
maplistDCG(_P_2, []) -->
[].
maplistDCG(P_2, [A|As]) -->
{call(P_2, A, B)},
[B],
maplistDCG(P_2, As).
这里有几个问题。当然是名字。还有终端[B]
:是否应该明确断开与连接目标的连接?
如果没有上述定义,则必须编写以下任一内容 - 两者都有严重的终止问题。
maplistDCG1(P_2, As) -->
{maplist(P_2, As, Bs)},
seq(Bs).
maplistDCG2(P_2, As) -->
seq(Bs),
{maplist(P_2, As, Bs)}.
seq([]) -->
[].
seq([E|Es]) -->
[E],
seq(Es).