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 回の呼び出しごとに結果をインクリメントします。誰でもこれを修正する方法を教えてもらえますか?