2017-04-17 9 views
0

最初の長さを与えられた2のリストを分割する関数を作成したいと思います。最初の長さが与えられた2つのリストを分割する

split(L,0,[],L). 

+4

使用長さ/ 2と追加/ 3 – CapelliC

+0

エレガント! (私は前のコメントを参照してください)。再帰的な解法は問題ありませんが、長さと添え字を使う方が簡単です。 –

答えて

3

あなたが望む結果を記述しようとすることから始めましょう。 ListStartEndに分割し、Startの長さをLengthにする必要があります。注意点としては

split(List, Length, Start, End) :- 
    length(Start, Length), 
    append(Start, End, List). 

lengthappendの順序は、効率の違いを生むだろう。 appendが最初に置かれた場合、appendはListの最初のゼロ要素でStartを統一し、長さチェックで失敗し、最初の要素、次に最初の2つ、3つの順にStartを統合します接頭語はListで、長さはLengthです。これらの明らかなデッドエンドをすべて回避するには、まずlengthを目標に設定します。これにより、正しいサイズのリストが表示されます。

+0

彼の宿題がうまくいくかもしれません。 –

+2

ニースですが、その2つの目標を交換することは好ましくありませんか? – false

+2

@falseそれは間違いありません。私はそれらの周りを交換し、なぜ片方向が良いのかについての説明を追加します。それを指摘してくれてありがとう。 – jcolemang

関連する問題