0

私は SML について新鮮で、それによって宿題をしています。「日付のリストと月 (つまり、int) を取り、指定された月にリスト内の日付がいくつあるかを返す関数 number_in_month を作成します。」

それが私が解決したことであり、それに問題はありません。助けてください。

`

    fun number_in_month (dates: (int*int*int) list,month:int) = 
    if ((#2 (hd dates)) = month)
    then val flag=1 flag+number_in_month(tl dates, month) 
    else number_in_month((tl dates),month)`

REPL は、VAL を EQUALOP に置き換えます。

4

4 に答える 4

1

あなたの問題は無限の再帰です。if..then..else 関数を再度実行しているため、結果に依存しないため、コンパイラはそれから抜け出せません。

fun number_in_month (dates: (int*int*int) list,month:int) = 
    if null dates
    then 0
    else if ((#2 (hd dates)) = month)
    then val flag=1 flag+number_in_month(tl dates, month) 
    else number_in_month((tl dates),month)
于 2013-01-23T18:46:06.687 に答える
1

私は自分でそれを修正しようとしましたが、それが私の解決策でした:

fun number_in_month (dias: (int*int*int) list,mes:int) = if null dias then 0 else if ((#2 (hd dias)) = mes) then let val flag = 1 + number_in_month(tl dias, mes) in flag end else number_in_month((tl dias),mes)

こちらもご利用いただければと思います!

于 2013-01-24T16:55:15.410 に答える
0

REPL のエラー メッセージは紛らわしいですが、関数内で代入ステートメントが必要な場合は、let-in-end 式を使用する必要があるという Jesper の意見は正しいです。それは確かにそのエラーを解決します。

于 2013-01-19T14:21:54.593 に答える