1

私たちの教授は、課題でこれを行うように私たちに依頼しました:

指定されたしきい値が負の場合、「エラー: 負のしきい値」というメッセージを出力し、空のリストを返す必要があります。これを行うには、ThresholdOutOfRange という例外を定義し、しきい値が負の場合は値を上げ、例外を処理して適切な動作を実現します。

例外を発生させ、値を返し、エラー メッセージを出力する方法がわかりません。現在、例外を発生させるための私のコードは次のとおりです(例外のある重要なビットのみ):

fun getnearbylist(center, threshold, ziplist) =
    let
      exception ThresholdOutOfRange;
      fun test_threshold(threshold, zip, nil) =nil
      |   test_threshold(threshold, zip, ziplist as x::xs) =
          if (threshold <0.0) then raise ThresholdOutOfRange
(*        [...skipped a long unrelated middle bit. most important is just knowing
              this function returns a string list...] *)
          else x::test_threshold(threshold, zip, xs)
    in
      test_threshold(threshold, center, ziplist)
      handle
      ThresholdOutOfRange => []
    end

したがって、私のコードは、例外が発生したときに空のリストを返すだけです。私の知る限り、例外は例外が発生した関数と同じ戻り値の型を持つ必要があるため、空のリストを返してエラー メッセージを出力できるようにするにはどうすればよいでしょうか?

4

2 に答える 2

1
  • まず、例外を宣言します。

    exception OutOfRangeException;
    
  • 例外を発生させる関数を定義します:

    fun someFunc x =
      if x < 0 then 
        raise OutOfRangeException
      else [1,2,3,4] (*return some list*)
    
  • 最後に、メッセージを出力して空のリストを返すことで例外を処理する関数:

fun someFunc_test x=    
  (someFunc x) handle OutOfRangeException => (print "exception"; [])
于 2013-04-08T22:48:05.750 に答える