2

私はこのような用語(より正確にはアトム)を持っています:
name1(value1),name2(value2)
そして代わりにこのような「実際の」リストを持ちたいです:
[name1(value1), name2(value2)]
またはこのような別の用語:
name1(value1)そしてname2(value2)
それを行う方法について何かアイデアはありますか?

4

3 に答える 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=[]ます。HH=','(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 に答える