OCaml 中有什么
What is Some in OCaml
此 Ocaml 代码遍历列表并输出最后一个元素。
我不明白我们输出的第二个条件Some x
let rec last = function
| [] -> None
| x::[] -> Some x
| _ :: t -> last t ;;
- 因此,如果列表为空,我们 return null。
- 如果 x 是我们 return
Some x
的最后一个元素(*这里的 Some x 是什么?*)
- 如果 x 不是最后一个元素,我们将在列表中继续前进。
Some
是 option
类型的构造函数。 None
是另一个构造函数。考虑以下 option
.
的定义
type 'a option = None | Some of 'a
这样做的最终效果是为函数提供 选项 到 return 一个值,或者一个不代表任何内容的值。想象一下,我想在列表中搜索项目的索引。如果该值不在列表中,我应该 return 怎么办?
let find_index value lst =
let rec aux value lst idx =
match lst with
| [] -> None
| x::_ when x = value -> Some idx
| _::xs -> aux value xs (idx + 1)
in
aux value lst 0
utop # find_index 4 [1; 8; 2; 5; 4; 10];;
- : int option = Some 4
─( 17:10:49 )─< command 3 >──────────────────────────────────────{ counter: 0 }─
utop # find_index 4 [1; 8; 2; 5; 7; 10];;
- : int option = None
两个值的类型都是 int option
,所以 OCaml 的类型系统很满意。
在您的示例中,空列表没有 last
元素,因此您 return None
.
然后我们可以对此进行模式匹配来处理这两种情况:
let some_list = [2; 3; 4]
let () =
match last some_list with
| None -> print_endline "This list doesn't have a last item."
| Some item -> print_endline ("The last item found was " ^ string_of_int item)
您可能 运行 进入了通过 return 特殊错误值处理此类情况的语言。例如,我们可以 return -1
。或者我们可以抛出一个 ValueNotFound
异常。
此 Ocaml 代码遍历列表并输出最后一个元素。
我不明白我们输出的第二个条件Some x
let rec last = function
| [] -> None
| x::[] -> Some x
| _ :: t -> last t ;;
- 因此,如果列表为空,我们 return null。
- 如果 x 是我们 return
Some x
的最后一个元素(*这里的 Some x 是什么?*) - 如果 x 不是最后一个元素,我们将在列表中继续前进。
Some
是 option
类型的构造函数。 None
是另一个构造函数。考虑以下 option
.
type 'a option = None | Some of 'a
这样做的最终效果是为函数提供 选项 到 return 一个值,或者一个不代表任何内容的值。想象一下,我想在列表中搜索项目的索引。如果该值不在列表中,我应该 return 怎么办?
let find_index value lst =
let rec aux value lst idx =
match lst with
| [] -> None
| x::_ when x = value -> Some idx
| _::xs -> aux value xs (idx + 1)
in
aux value lst 0
utop # find_index 4 [1; 8; 2; 5; 4; 10];;
- : int option = Some 4
─( 17:10:49 )─< command 3 >──────────────────────────────────────{ counter: 0 }─
utop # find_index 4 [1; 8; 2; 5; 7; 10];;
- : int option = None
两个值的类型都是 int option
,所以 OCaml 的类型系统很满意。
在您的示例中,空列表没有 last
元素,因此您 return None
.
然后我们可以对此进行模式匹配来处理这两种情况:
let some_list = [2; 3; 4]
let () =
match last some_list with
| None -> print_endline "This list doesn't have a last item."
| Some item -> print_endline ("The last item found was " ^ string_of_int item)
您可能 运行 进入了通过 return 特殊错误值处理此类情况的语言。例如,我们可以 return -1
。或者我们可以抛出一个 ValueNotFound
异常。