我有一个谓词:
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)
我怎样才能做到这一点?
我有一个谓词:
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)
我怎样才能做到这一点?
我认为您可能想要使用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)]