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]
匹配两元素列表等等)谢谢,这正是我最后要做的!