私はちょうどプロローグの学習を開始し、リストに関連する問題を処理するのは難しいと思う。 私にリストがある場合。このリストの中には、3つの内部リストがあります。私は、Xが、私は(この文字は、内側のリストの最後の要素である必要があります移動したい文字である「移動(、に、RからL、X)」と呼ばれる述語を記述する必要がプロローグ:リスト間で要素を移動
[[a,b,c], [d,e,f],[h,g]]
)、Fromは移動したいリストのインデックス、Toは移動したいリストのインデックスです。例えば
move([[a,b,c], [d,e,f],[h,g]], f, 2, 3, R).
戻り
R = [[a,b,c], [d,e],[h,g,f]]
もう一つの例:
move([[a,b,c], [d,e,f],[h,g]], f, 2, 1, R).
戻り
R = [[a,b,c,f], [d,e],[h,g]]
文字が最後の要素である場合、私は判断するためにヘルパー述語を書きましたリスト:
last([A], C):- A == C.
last([_|T], C):- last_one(T, C).
私はそれについて考えて数時間を過ごしたが、ない作業ソリューション。助けてください?
与えられた要素が指定されたインデックスのリストに存在しない場合、またはいずれかのインデックスのリストが存在しない場合、述部は失敗するはずです。あるいは、指標が同じであれば?これは非常に明確な述語ではなく、Prolog-ish(本質的に必須)ですが、カウンタを追加するには補助述語が必要です。また、 'nth1/3'を使用する必要があります。 – lurker
'A == C'は' A = C'でなければなりません。しかし、さらにうまくいって、 'last([A]、C): - A = C.'は' last([A]、A) 'で置き換えるのが最も良いでしょう。 – lurker
あなたの述語は現在のカウントを調べます。その現在のカウントが "from"インデックスと一致する場合、その要素は現在のサブリストから削除されます。それ以外の場合、現在のサブリストは結果リスト内のサブリストと統合されます。現在のカウントが "to"インデックスと一致する場合、要素はresultサブリストに含まれます。あなたはそれに基づいて何かを考え出すことができるはずです。あなたはまた、決定しなければなりません:結果のサブリストで要素がどこに行くのですか、それとも重要ですか? – lurker