リストのすべての要素をその深さだけ増やそうとしています。たとえば、リストを分割して、リストの各要素をプロローグの深さでインクリメントします
foo([0, 0, [0]], [1, 1, [2]]) -> true
また、私は組み込みのPrologリスト述語なしでこれを行いたいと思います。どのようにこれを解決するための任意のアイデアですか?
リストのすべての要素をその深さだけ増やそうとしています。たとえば、リストを分割して、リストの各要素をプロローグの深さでインクリメントします
foo([0, 0, [0]], [1, 1, [2]]) -> true
また、私は組み込みのPrologリスト述語なしでこれを行いたいと思います。どのようにこれを解決するための任意のアイデアですか?
divide_halfの場合、リストは何らかの種類の分割を定義し、分割の部分は十分に近い長さの2つのことを検証する必要があります(個別に行うことができます)。
2番目は、各要素の検索を開始し、それを修正して深さを追跡し、最後にTHATを変更して要素の変更を加えたリストのコピーを作成します(ただし、数字を何か1つ増分することを意味します)。
この定義は、任意の組み込み述語せずにリストを分割:鉛
halve(List, A, B) :- halve(List, List, A, B).
halve(B, [], [], B).
halve(B, [_], [], B).
halve([H|T], [_,_|T2], [H|A], B) :-
halve(T, T2, A, B).
おかげで、私はそのようにしました>私は(それがリストでない場合)、それをインクリメントし、すべての要素を通って行きますよ、もしそれがリストであれば、私は関数を再度呼び出し、icrementは変数です。しかし、私は[1、[1,1]]のようなリストに問題があります。なぜなら、Bが[1,1]ならばAはB +1です: – Johnzzz