0

私は SML を学習しようとしていて、2 つの関数を実装しようとしています。最初の関数は問題なく動作しますが、2 番目の関数を追加すると実行時エラーが発生します。

stdIn:1.2-1.17 Error: unbound variable or constructor: number_in_month

これは、関数 number_in_month を呼び出すときに発生します。私のコードは次のとおりです。

 fun is_older(d1 :int*int*int,d2 :int*int*int) =
  (#1 d1) < (#1 d2) andalso (#2 d1) < (#2 d2) andalso (#3 d1) < (#3 d2)


fun number_in_month(da :(int * int * int) list ,mo : int) =
    if da = []
    then 0
    else if (#2(hd da)) = mo
     then 1 + number_in_month((tl da),mo)
    else 0 + number_in_month((tl da),mo)
4

1 に答える 1

1

あなたの質問は驚くべきことに、SML リストの繰り返し(8 か月前)、SML での再帰(9 か月前)、リスト内の要素のカウント(8 か月前) などの他の質問と非常によく似ているため、質問してもポイントが得られないことは確かです。創造的な質問です。

上記の質問のいくつかは広範囲にわたって回答されています。それらを見てください。

より良いスタイルで書き直されたコードは次のとおりです。

(* Find better variable names than x, y and z. *)
fun is_older ((x1,y1,z1), (x2,y2,z2)) =
    x1 < x2 andalso y1 < y2 andalso z1 < z2

fun number_in_month ([], mo) = 0
  | number_in_month ((x,y,z)::rest, mo) =
    if y = mo then 1 + number_in_month(rest, mo)
              else 0 + number_in_month(rest, mo)
于 2013-10-17T08:59:20.287 に答える