从谓词创建列表

时间:2012-07-17 18:56:31

标签: prolog

我有一个谓词:

delta(q1,a,q2).
delta(q1,b,q3).
delta(q2,a,q4).
delta(q2,a,q3).
delta(q3,a,q1).

我希望将它们转换为这样的列表:
nfatodfa([(q1,a,q2),(q1,b,q3),(q2,a,q4),(q2,a,q3),(q3,a,q1)],L)

我该怎么做?

1 个答案:

答案 0 :(得分:1)

我认为您可能想要使用的是 findall / 3 来构建此列表:

?- findall(d(X,Y,Z), delta(X,Y,Z), L).

L = [d(q1,a,q2),d(q1,b,q3),d(q2,a,q4),d(q2,a,q3),d(q3,a,q1)]

请注意,这会使用仿函数d列出复合词来保存内容,这与您概述的内容略有不同。然而,仅括号,例如。 (q1,a,q2),使用起来可能有点棘手。如果您只想要裸三元组,请执行以下操作:

?- findall((X,Y,Z), delta(X,Y,Z), L).

L = [(q1,a,q2), (q1,b,q3), (q2,a,q4), (q2,a,q3), (q3,a,q1)]