Functional programming ML函数定义的类型配置文件
我在Google上搜索过,但没有找到关于ML类型配置文件的任何信息 例如:Functional programming ML函数定义的类型配置文件,functional-programming,ml,Functional Programming,Ml,我在Google上搜索过,但没有找到关于ML类型配置文件的任何信息 例如:fun bar(a,b,c)=[a,b+hd(c)] 类型配置文件是:int*int*int-list->int-list和 x z=[x,tl(z)]类型配置文件是'a list->'a list->'a list list list 但是我不理解它背后的逻辑。类型配置文件不是一件事。你可能是指类型推断。在这种情况下很容易。首先,请注意,像您这样的通用函数定义相当于编写 val weird = fn x => fn
fun bar(a,b,c)=[a,b+hd(c)]代码>
类型配置文件是:int*int*int-list->int-list和
x z=[x,tl(z)]
类型配置文件是'a list->'a list->'a list list list
但是我不理解它背后的逻辑。类型配置文件不是一件事。你可能是指类型推断。在这种情况下很容易。首先,请注意,像您这样的通用函数定义相当于编写
val weird = fn x => fn z => [x, tl z]
现在:
从函数的结构来看,对于某些类型的A、B、C,它遵循的是weird:A->B->C
结果是一个列表,因此对于某些类型D,C
必须是D list
您正在调用z
上的tl
,因此对于某些类型的E,B
必须是E list
该调用的结果与E list
相同,因此D
必须与E list
相同
x
用作同一列表的元素,因此A
也必须是E list
没有进一步的约束,因此我们可以为E
选择任意'a
把所有这些放在一起,你会得到
weird : 'a list -> 'a list -> 'a list list
“类型配置文件”不是一件事。你可能是指类型推断。在这种情况下很容易。首先,请注意,像您这样的通用函数定义相当于编写
val weird = fn x => fn z => [x, tl z]
现在:
从函数的结构来看,对于某些类型的A、B、C,它遵循的是weird:A->B->C
结果是一个列表,因此对于某些类型D,C
必须是D list
您正在调用z
上的tl
,因此对于某些类型的E,B
必须是E list
该调用的结果与E list
相同,因此D
必须与E list
相同
x
用作同一列表的元素,因此A
也必须是E list
没有进一步的约束,因此我们可以为E
选择任意'a
把所有这些放在一起,你会得到
weird : 'a list -> 'a list -> 'a list list
您可能找不到任何东西,因为在ML中没有所谓的“类型配置文件”。这些是函数的类型。搜索“类型推断”以查找其背后的逻辑。您可能没有找到任何内容,因为在ML中没有任何内容被称为“类型概要文件”。这些是函数的类型。搜索“类型推断”以找到其背后的逻辑。