私はプロローグの宿題の問題を抱えています。基本的な問題は、3つのリストがあり、それぞれにフレーズと値を含むメンバーがあることです。私はランダムにリストのメンバーを選択し、フレーズを印刷し、少なくとも2つのリストからフレーズを印刷するまで繰り返し、印刷されたフレーズの合計値は少なくとも9です。プロローグリスト操作支援
私はこれまでにやったことがあります:私はプログラムの数十回の繰り返しを経て、SWIのドキュメントとLean Prolog Nowとスタックのオーバーフローを検索しました。このプロセスでは、リストに項目を追加するためにassert()を使用すると、後続の実行で破損が発生し、すべての変数がローカルであり、空のリストに単一の項目を追加してもリストにはなりませんあなたは変数の値を変えることはできません。 私のプログラムは、以下を実行します:ランダムに3つのリストから1つを選択します。そのリストから項目をランダムに取得します。選択した項目のフレーズと値を異なる変数に置き、それらを出力します。
主な問題は、私のリスト操作が機能していないように見えることです。 "append(Usedlist、Z、Usedlist3)"という行は、エラーを投げずにコードの2番目の反復で常に失敗します。さらに、メンバー(Z、Usedlist)は、2回目の繰り返しでランダムにリピートを取得するまれなケースとして機能していないと考えています。しかし、私は不具合がリストに正しく追加されていないということを推測します。
関連するコード(健全性の理由から1つのリストに凝縮)
main :-
A is 0,
B is 0,
C is 0,
Num is 0,
Usedlist = ["Garbage data1", "More garbage data"],
prologwhile(Num, A, B, C, Usedlist).
prologwhile(Num, A, B, C, Usedlist) :- Num < 9 ,
F = [["time of day", 1], ["Season", 5], ["Yesterdays weather", 2], ["Month of last big storm", 2], ["Randomly generated riddle", 9], ["A captcha", 1], ['Current day', 6], ["Tomorrows date", 5]],
random_member(Rand, F),
nth0(1, Rand, Add),
writeln(Rand),
nth0(0, Rand, Z),
writeln(Usedlist),
( member(Z, Usedlist) ->
writeln("Test5"),
prologwhile(Num, A, B, C, Usedlist)
; writeln(Rand),
writeln(Add),
writeln("Test6"),
append(Usedlist, Z, Usedlist3),
writeln(Z),
C3 is 1,
Num3 is Num + Add,
writeln(Num3),
prologwhile(Num3, A, B, C3, Usedlist3)
)
サンプル出力
[Tomorrows date,5]
[Garbage data1,More garbage data]
[Tomorrows date,5]
5
Test6
Tomorrows date
5
[time of day,1]
[Garbage data1,More garbage data|Tomorrows date]
[time of day,1]
1
Test6
false.
ありがとうございました。これはうまくいくようです。 –
@mat:非常に良い説明的な答え、+ s(0)! – tas
私はこれ以上の作業をしてきたので、最後の2つのステップが再びどのように機能するのかを私に説明できますか? A、B、Cを追加する必要がありますが、すべてが失敗することはありません。 –