Functional programming 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

我在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 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中没有任何内容被称为“类型概要文件”。这些是函数的类型。搜索“类型推断”以找到其背后的逻辑。