0

たとえば、可変数のリストが指定されているとしましょう。ただし、任意の数のリストを入力できます。[1,2] + [3,4,5] + [6,7,8,9] + [10,11] + [12,13,14] equals L.変数内に次のリストを指定する必要がありますL[1,2,3,4,5,6,7,8,9,10,11,12,13,14]

2つのリストを連結するための私のコードは次のとおりです。

joinLists([FLH|FLT], SL, [FLH|RLT]):-
  joinLists(FLT, SL, RLT).
  joinLists([], H, H).

:-op(500, xfx, +).
:-op(600, yfx, equals).

X + Y equals Z:-
  joinLists(X, Y, Z).

[1,2,3] + [4,5,6,7] equals L.を与えますL = [1,2,3,4,5,6,7]が、リストの数が不定の場合の問題を解決するにはどうすればよいですか?

4

1 に答える 1

2

演算子の宣言が正しくないと思います。合計は結合法則である必要があります(美的好みに合わせて、標準の+ / 2の動作を変更しないように、記号も変更します)。

:-op(500, xfy, ++).
:-op(600, xfx, cat).

その後、あなたは書くことができます

L1 ++ R cat C :- !, R cat R1, append(L1, R1, C).
L cat L .

テスト

?- [1,2,3]++[4,5,6]++[7,8,9] cat X.
X = [1, 2, 3, 4, 5, 6, 7, 8, 9].

私はそのような定義に何の便宜も見ていません、SWI-Prologappend/2ソースが利用可能であると考えてください...

于 2012-11-10T21:11:19.883 に答える