1

SML の関数に問題があります。この関数は、合計されないが合計された数のリスト インデックスを返す必要があります。関数の呼び出し: index(10, [1,2,3,4,5,6,7]) 結果は 3 になります (10 は数値の合計です。10 を与えるリストからインデックスを探します。例: 1+2+3=6、1+2+3+4=10、前のものを返す)

fun index (sum : int, numbers : int list) =
    if null numbers
    then 0
    else if hd(numbers) > sum
    then 0
    else 1 + index(sum, (hd(numbers)+(hd(tl numbers)))::(tl numbers))

うまくいくように見えますが、結果は間違っています。関数は、そうすべきでない場合でも、2 回の呼び出しごとに結果をインクリメントします。誰でもこれを修正する方法を教えてもらえますか?

4

2 に答える 2

2

カウンターと合計を保持する必要があります。再帰呼び出しごとに増加するカウンター、合計が各 hd(number) の合計に等しくなり、合計 > 合計のときにカウンターを返します。

このようなもの;

if (total + hd numbers) >= sum
then counter
else recursivecall(total + hd numbers, tl numbers, counter + 1)
于 2013-10-14T05:49:53.560 に答える