我能';有些不懂,有些不懂,有些在sml里
我不懂一些,一点也不懂,有些是sml的 正如我所知,每个p1,p2…pn都是构造函数我能';有些不懂,有些不懂,有些在sml里,sml,smlnj,Sml,Smlnj,我不懂一些,一点也不懂,有些是sml的 正如我所知,每个p1,p2…pn都是构造函数 case e0 of p1 => e1 p1 => e1 |p2 => e2 … |pn => en 但当我们表示 datatype'a option=NONE |部分'a 教授说没有一个不是构造函数,只是“选项”的子类型 我不明白为什么会这样 我也有这样的错误 isSome NONE; stdIn:1.2-23.4 Error: operator and ope
case e0 of
p1 => e1
p1 => e1
|p2 => e2
…
|pn => en
但当我们表示
datatype'a option=NONE |部分'a
教授说没有一个不是构造函数,只是“选项”的子类型
我不明白为什么会这样
我也有这样的错误
isSome NONE;
stdIn:1.2-23.4 Error: operator and operand do not agree [tycon mismatch]
operator domain: 'Z ?.Assembly.option
我错了吗
NONE
不是构造函数,只是'a选项的子类型
我没有想到说NONE
是一个类型为'a option
的值/模式构造函数是错误的。我不确定你的教授想说什么,但也许是一个选项实际上是一系列类型NONE
是每种类型的值/模式构造函数'a option
用于'a
的具体值,但由于NONE:'a option
,即使它不接受任何值参数,它也会接受类型参数(例如int option
的int),使其更高
标准ML没有一种语法来描述类型运算符的类型,如option
,但在Haskell中,我们会说option
有kind*->*
,int option
有kind*
。返回到NONE:“一个选项”
,您可以具体化它所没有的内容,以获得明确的单一类型的值/模式构造函数
如果你对类型理论感兴趣的话。一个更简单、更不精确的观点是{NONE
}是'A option
类型的值的子集,并且该子集在结构上与单元
类型{()
}等价。但是NONE
,作为该子集的一个元素,不是子类型,也不是类型。它是一个值和一个模式构造函数,具体取决于使用它的位置:
fun isSome NONE = false
| isSome (SOME _) = true
这里,模式中使用了NONE
fun map f NONE = NONE
| map f (SOME x) = SOME (f x)
此处,NONE
用于左侧的图案中,并用作右侧的值
也许在类型理论方面有更多经验的人可以纠正我
这看起来像是一个选项有两个相互冲突的定义,一个是您自己定义的,另一个来自标准库。像这样的标准库函数是一些
只对标准库定义的类型起作用,因此,如果为了说明目的而声明自己的数据类型'a option=NONE | a
中的一些,那么该定义实际上会与内置的定义冲突,并因此影响内置的定义,使所有引用它的标准库函数变得不那么有用,因为您无法使用NONE
和SOME…
直接创建或模式匹配值,或者使用键入annotate:。。。选项
NONE
不是构造函数,只是'a选项的子类型
我没有想到说NONE
是一个类型为'a option
的值/模式构造函数是错误的。我不确定你的教授想说什么,但也许是一个选项实际上是一系列类型NONE
是每种类型的值/模式构造函数'a option
用于'a
的具体值,但由于NONE:'a option
,即使它不接受任何值参数,它也会接受类型参数(例如int option
的int),使其更高
标准ML没有一种语法来描述类型运算符的类型,如option
,但在Haskell中,我们会说option
有kind*->*
,int option
有kind*
。返回到NONE:“一个选项”
,您可以具体化它所没有的内容,以获得明确的单一类型的值/模式构造函数
如果你对类型理论感兴趣的话。一个更简单、更不精确的观点是{NONE
}是'A option
类型的值的子集,并且该子集在结构上与单元
类型{()
}等价。但是NONE
,作为该子集的一个元素,不是子类型,也不是类型。它是一个值和一个模式构造函数,具体取决于使用它的位置:
fun isSome NONE = false
| isSome (SOME _) = true
这里,模式中使用了NONE
fun map f NONE = NONE
| map f (SOME x) = SOME (f x)
此处,NONE
用于左侧的图案中,并用作右侧的值
也许在类型理论方面有更多经验的人可以纠正我
这看起来像是一个选项有两个相互冲突的定义,一个是您自己定义的,另一个来自标准库。像这样的标准库函数是一些
只对标准库定义的类型起作用,因此,如果为了说明目的而声明自己的数据类型'a option=NONE | a
中的一些,那么该定义实际上会与内置的定义冲突,并因此影响内置的定义,使所有引用它的标准库函数变得不那么有用,因为您无法使用NONE
和SOME…
直接创建或模式匹配值,或者使用键入annotate:。。。选项
我认为你的教授不是困惑就是不清楚NONE
是一个构造函数,而不是一个类型,SML也没有正常意义上的子类型。我认为你的教授要么困惑,要么不清楚NONE
是一个构造函数,而不是一个类型,并且SML没有正常意义上的子类型。