私はこのような用語(より正確にはアトム)を持っています:
name1(value1),name2(value2)
そして代わりにこのような「実際の」リストを持ちたいです:
[name1(value1), name2(value2)]
またはこのような別の用語:
name1(value1)
そしてname2(value2)
それを行う方法について何かアイデアはありますか?
質問する
2039 次
3 に答える
3
どうですか:
ands((A,B)) --> !, ands(A), ands(B).
ands(X) --> [X].
例:
?- phrase(ands((a,b,c,d)), Ls).
Ls = [a, b, c, d].
于 2012-05-10T18:39:24.607 に答える
1
単純:リスト[H|T]
とそのヘッド要素である問題の複合語については、を持っていT=[]
ます。H
H=','(A,B), List=[A,B]
ただ書くこともできますH=(A,B), List=[A,B].
-ここでは括弧が必須です。
IOWあなたが話しているデータ用語は、ファンクターとして「、」を使用した単なる通常の複合用語です。これらの用語の構造が事前にわからない場合は、 `= .. /2'で調べることができます。
H =.. [Functor | Arguments].
(@matから同じアドバイスを受けたようです)。
于 2012-05-11T22:19:12.587 に答える
1
Prologでは、パターンマッチングを使用して、リスト要素に異なる処理を適用します。
change_list([], []). % end of recursion
change_list([(T1,T2)|Ri], [T1,T2|Ro]) :- % recursive step doing required transformation
!, change_list(Ri, Ro).
change_list([E|Ri], [E|Ro]) :- % catch all rule: copy elem
change_list(Ri, Ro).
于 2012-05-11T17:14:38.973 に答える