これは C++ で簡単に実行できます (注: これが正しいかどうかはテストしていません。これは、私がやろうとしていることを説明するためだけです)。
const int BadParam = -1;
const int Success = 0;
int MyFunc(int param)
{
if(param < 0)
{
return BadParam;
}
//normal processing
return Success;
}
しかし、F# の早い段階でルーチンを終了する方法がわかりません。私がやりたいことは、入力が正しくない場合は関数を終了し、入力が問題ない場合は続行することです。F# のいくつかの基本的な特性が欠けているのでしょうか、それとも FP を学習しているだけなので、間違った方法で問題に取り組んでいますか? ここで私の唯一のオプションは失敗ですか?
これは私がこれまでに得たものであり、正常にコンパイルされます:
#light
module test1
(* Define how many arguments we're expecting *)
let maxArgs = 2;;
(* The indices of the various arguments on the command line *)
type ProgArguments =
| SearchString = 0
| FileSpec = 1;;
(* Various errorlevels which the app can return and what they indicate *)
type ProgReturn =
| Success = 0
| WrongNumberOfArgumentsPassed = 1;;
[<EntryPoint>]
let main (args:string[]) =
printfn "args.Length is %d" args.Length
let ProgExitCode = if args.Length <> maxArgs then
printfn "Two arguments must be passed"
int ProgReturn.WrongNumberOfArgumentsPassed
(* Want to exit "main" here but how? *)
else
int ProgReturn.Success
let searchstring, filespec = args.[int ProgArguments.SearchString],args.[int ProgArguments.FileSpec];
printfn "searchstring is %s" searchstring
printfn "filespec is %s" filespec
ProgExitCode;;
この種のことを扱うFPの方法はありますか?