-2

次の 3 つの Prolog プログラムについて教えていただけますか?

  1. 要素をリストにまとめ、3で分かれているか分かれていないかをチェック? たとえば、リストは [1, 2, 3] --> 要素の合計は 3 で除算されます。1+2+3=6、6/3=2 なので、出力は次のようになります。真実。

  2. 7 がリストにある場合は、それを 2 倍にします。例: 入力リスト --> [1,7,3,7,7]、出力は [1,7,7,3,7,7,7,7] である必要があります。

  3. 7 がリストにある場合は、2,7,2 に変更します。例: 入力リスト -->[1,7,2,1]、出力は [1,2,7,2,2,1] である必要があります。

プログラムとは何か、SWI-Prolog でテストする方法は?

期待してありがとう!

4

2 に答える 2

1

いくつかのヒントを紹介します。

  1. a) 合計を計算する b) 3 で除算するかどうかを確認する必要があります。SWI-Prolog を使用する場合sum_list、ライブラリlistsには a) を実行する述語があり、 ... is ... mod ...b) ではなく再帰を使用する必要がある場合合計を計算するための組み込み述語:

    sum([X|Xs], Acc, Sum) :- Acc1 は Acc + X, sum(Xs, Acc1, Sum) です。

    合計([]、Acc、Acc)。

    合計(リスト、合計):-合計(リスト、0、合計)。

  2. および 3. これらは再帰的な手順です。リストを調べて、7 が見つかった場合は、質問 2 では 7,7 に、質問 3 では 2,7,2 に置き換えます。

traverse_list([],[]).
traverse_list([7|Xs], [7,7|Ps]) :-
   !,
   traverse_list(Xs,Ps).
traverse_list([X|Xs], [X|Ps]) :-
   traverse_list(Xs,Ps).

このフラグメントを 3 に変更することを考えてください。

于 2012-05-27T12:56:22.767 に答える
0

I'd recommend giving it a little thought and figuring it out on your own. That said, I'll give you something to help get started:

1) I'm assuming your instructor wants to see you do the recursion rather than use the built-in sum_list predicate. That would look something like this:

sum([FirstNum | Rest], Sum) :- sum(Rest, Sum1), Sum is FirstNum + Sum1.

Then use the "mod" operator to check divisibility. Remember to include a base case for when the recursion reaches the empty set []. If you can understand this, the rest should be easy. Good luck.

于 2012-05-27T14:28:06.123 に答える