Types 如何检查类型?

Types 如何检查类型?,types,ml,typechecking,Types,Ml,Typechecking,假设我声明了以下数据类型: datatype 'a data = Zero | One of 'a | Many of 'a list; 我需要一个函数来检查它接收的类型。例如,如果foo接收到一个零或一个带有零'a的多,那么它将返回零。我就是不知道该怎么做(我对ML非常陌生)。以下是我目前得到的信息: fun foo(Zero) = Zero | foo(Many []) = Zero; foo应该是:'a data->'a data。顺便说一句。你走在正确的轨道上。您编

假设我声明了以下数据类型:

datatype 'a data = Zero | One of 'a | Many of 'a list;
我需要一个函数来检查它接收的类型。例如,如果foo接收到一个零或一个带有零'a的多,那么它将返回零。我就是不知道该怎么做(我对ML非常陌生)。以下是我目前得到的信息:

fun foo(Zero) = Zero    
    | foo(Many []) = Zero; 

foo应该是:'a data->'a data。顺便说一句。

你走在正确的轨道上。您编写的代码应该可以编译并工作,但它忽略了其他一些可能的情况。如果您使用
One 4
Many[1,2,3]
调用
foo
,它将失败并出现
匹配
异常,因为
foo
的定义不包括这些情况

以下是您首先需要介绍的内容:

fun foo(Zero) = Zero    
  | foo(Many []) = Zero
  | foo(Many xs) = (* xs bound to the non-empty list of 'a *)
  | foo(One x) = (* x bound to a single 'a *)

非常感谢你。如果它只收到一个'a'的多个对象,您对如何使它返回一个'a'的对象有什么建议吗?我想需要某种类型的铸造。你肯定不需要铸造。只需添加另一个带有模式
Many[x]
的子句,当使用单例列表调用函数时,该模式将匹配。(就像
[]
匹配空列表一样,
[x]
匹配单元素列表,
[x,y]
匹配两元素列表等等)谢谢,这正是我最后要做的!