リストAとリストBの両方からn番目のエレメントを削除し、それぞれのn番目のエレメントと一致しないようにしたいとします。したがって、たとえば:A
のリストは[1,2,3,4,5]
、B
のリストは[1,2,2,4,7]
です。結果はリストC
には[3,5]
、リストD
には[2,7]
が含まれているはずです。私はこの小さなコードを考え出しましたが、まだ正しく動作していません。代わりに[3,5]
と[2,7]
の再帰を使用してリストに複数のヘッドを追加する方法
without_doubles([], [], [_], [_]).
without_doubles([H|T1], [H|T2], C, D):-
without_doubles(T1, T2, C, D).
without_doubles([H1|T1], [H2|T2], [H1|C], [H2|D]):-
without_doubles(T1, T2, C, D).
、私は[3,5,_G2442]
と[2,7,_G2445]
を取得しています。私はそれがおそらく修正するのは簡単だが、私はそれを把握するように見えることはできません知っている。事前に助けてくれてありがとう!
'_'sは' without_doubles([]、[]、[_]、[_]) 'でやっていますか。? –
私は個人的に、基本ケースが再帰の目標状態を記述しなければならないと考えました。したがって、AとBは空であり、CとDはいくつかのランダム変数を含んでいます( '_'のように)。 – Boomer
Prologには本当に「入力」と「出力」はありません。また、逆の方法でクエリを実行することもできます。残念ながら、私は、Haskell/Prologの通訳が多くの魔法のことをする人がたくさんいます。実際、インタプリタの仕組みは非常に単純です(ただし、最適化は非常に複雑です)。アンダースコアは単に匿名変数を意味します。あなたは 'without_double([]、[]、[A]、[B])'と書くことができました。同じように。 –