私は次のような述語を持っています:
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)]