私はプロローグを初めて利用しています。プロローグ入力 `(a、z、b)`を `[a、z、b]`に変換する
与えられた変数であるプロローグ入力を、閉じ括弧(a,z,b)
内のコマ分け値の形式で、[a,z,b]
という形式のプロローグリストに変換する必要があります。
何人かお手伝いできますか?
私はプロローグを初めて利用しています。プロローグ入力 `(a、z、b)`を `[a、z、b]`に変換する
与えられた変数であるプロローグ入力を、閉じ括弧(a,z,b)
内のコマ分け値の形式で、[a,z,b]
という形式のプロローグリストに変換する必要があります。
何人かお手伝いできますか?
シーケンスの主ファンクタは、リストの/ 2です./2です。
?- convert((1,2,3),L).
L = [1, 2, 3].
?- convert((1,(2,3),4),L).
L = [1, (2, 3), 4].
アレクサンダーは、上記の書いたものに加えて:として、多くの場合、リストを記述する際、DCGsはこの中にもぴったりですしたがって、
% call: convert(+Sequence,-List)
convert(','(A,B), [A|B1]) :- !, convert(B,B1).
convert(A,[A]).
私は、シーケンスの要素を変換してはならないことを前提とし
tuple_list((A,B)) --> !, tuple_list(A), tuple_list(B).
tuple_list(A) --> [A].
アレクサンダーは、今述べた作品第二ケース(念のためにあなたはこれが欲しい):あなたはまた、タプル内のタプルを平らにしたい場合は特に場合、
?- phrase(tuple_list((1,(2,3),4)), Ls).
Ls = [1, 2, 3, 4].
私はこれをあなたのユースケースでは必要ないと思いますが、そうした場合、このDCG表記の使用を検討してください。それ以外の場合、このタプル表現は "defaulty"と呼ばれます。なぜなら、それを処理するための "デフォルト"のケース(第2のルール)が必要であり、これは両方向で述語を使用できないためです。異なるケースを記述するために専用のファンクタを使用する方がよりクリーンです。たとえば、(a、b、c)の代わりにtriple(a、b、c)のような項を使用して、トリプルを表す、任意の長さのシーケンスを表すリストなどを使用して、変換述部はもっと多くなります宣言的であり、すべての方向で使用可能です。
実際には、( '、')/ 2と '。'/2です。 – false
はい、もちろんです。 –