1

多くの接続詞 (より大きな問題の一部) から構成される数式に興味があります。次のようなプログラムを書きたいと思います。

:- get_params(conj(conj(a,b),c),X)

そして、接続詞のすべてのパラメータのリストを返しますX=[a,b,c]。現時点でできること

:- get_params(conj(a,b),X)取得するためX=[a,b]

単純な Prolog パターン マッチングを使用しますが、次のようなことを行うにはどうすればよいでしょうか。

:- get_params(conj(conj(a,b),c),X)取得するためX=[a,b,c]

それは本当に簡単に思えますが、私は一日中苦労してきました!

4

2 に答える 2

4

リストを記述しているので、DCG表記の使用を検討してください。

params(conj(A,B)) --> !, params(A), params(B).
params(X)         --> [X].

例:

?- phrase(params(conj(conj(a,b),c)), Ps).
Ps = [a, b, c].
于 2010-11-09T20:39:05.003 に答える
2

すべての conj ファンクタがバイナリであると仮定すると:

get_params(X, Y, L) :- 
  get_params(X, L1),
  get_params(Y, L2),
  append(L1, L2, L).
get_params(conj(X, Y), L) :-
  get_params(X, Y, L), !.
get_params(A, [A]).
于 2010-11-09T16:55:12.453 に答える