0

たとえば、リストが単調に増加しているかどうかをテストする関数があり、ソース コードとテスト ケースは次のとおりです。

open Printf

let rec mon_inc (numbers : int list) : bool =
    match numbers with
    | [] -> true
    | _ :: [] -> true
    | hdn :: tln -> (hdn <= (List.hd tln)) && mon_inc(tln)

let a = [1;2;5;5;8]
let b = [1;2;5;4;8]
let c = [8]
let d = []
let e = [7;8]

let () =
    printf "The answer of [1;2;5;5;8]: %B\n" (mon_inc a)

let () =
    printf "The answer of [1;2;5;4;8]: %B\n" (mon_inc b)

let () =
    printf "The answer of [8]: %B\n" (mon_inc c)

let () =
    printf "The answer of []: %B\n" (mon_inc d)

let () =
    printf "The answer of [7;8]: %B\n" (mon_inc e)

コードをコンパイルして実行します。

$ corebuild inc.native
$ ./inc.native 
The answer of [1;2;5;5;8]: true
The answer of [1;2;5;4;8]: false
The answer of [8]: true
The answer of []: true
The answer of [7;8]: true

ただし、この関数を utop で使用したい場合は、次のように表示されます。

utop # #use "inc.ml";;
File "inc.ml", line 7, characters 29-40:
Error: This expression has type int option
but an expression was expected of type int 
4

2 に答える 2

3

これは、最上位で Core.Std モジュールを開いているためです。

Core.Std は、OCaml の標準ライブラリを別のインターフェイスでオーバーレイしたものです。たとえば、標準ライブラリ関数 List.hd は型 'a の値を返し、list が空の場合は例外を発生させます。Janestreet のバージョンでは、関数 List.hd の型が異なります。オプションを返します。リストが空の場合は None に評価され、そうでない場合は Some の値に評価されます。追加することを検討してください

open Core.Std

inc.mlの先頭へ。

于 2014-09-29T15:40:20.570 に答える