Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ocaml如何访问类型定义中的元素_Ocaml - Fatal编程技术网

Ocaml如何访问类型定义中的元素

Ocaml如何访问类型定义中的元素,ocaml,Ocaml,使用ocaml中的以下类型定义: type yearday = YMD of int * int * int 您将如何访问该类型的不同INT?就像我只想要第一个int的值一样。像这样的值的部分是通过模式匹配来访问的。下面是一个返回第一个int的函数: let y_of_ymd (YMD (y, _, _)) = y 下面是它在顶级(OCaml REPL)中的外观: 有更简洁的方法来写这篇文章,但我认为这篇文章给出了关于发生了什么的最好的想法。谢谢!后续问题:如果类型定义有两个选项,如:ty

使用ocaml中的以下类型定义:

type yearday = YMD of int * int * int 

您将如何访问该类型的不同INT?就像我只想要第一个int的值一样。

像这样的值的部分是通过模式匹配来访问的。下面是一个返回第一个int的函数:

let y_of_ymd (YMD (y, _, _)) = y
下面是它在顶级(OCaml REPL)中的外观:


有更简洁的方法来写这篇文章,但我认为这篇文章给出了关于发生了什么的最好的想法。

谢谢!后续问题:如果类型定义有两个选项,如:type yearday=YMD of int*int*int | YD of int*int;;是否有一种方法可以使y_of_ymd同时适用于类型的两个定义,或者有一种方法可以找出它是哪一个定义?是的,有不同的变体可能比只有一个变体更常见。我会更新我的答案。谢谢!这帮了大忙。
# let y_of_ymd (YMD (y, _, _)) = y;;
val y_of_ymd : yearday -> int = <fun>
# let myymd = YMD (2017, 4, 18);;
val myymd : yearday = YMD (2017, 4, 18)
# y_of_ymd myymd;;
- : int = 2017
#
type yearday = YMD of int * int * int | YD of int * int

let y_of_yearday yearday =
    match yearday with
    | YMD (y, _, _) -> y
    | YD (y, _) -> y