Function 理解sml语言中的语法

Function 理解sml语言中的语法,function,syntax,sml,Function,Syntax,Sml,您好,我开始用sml写东西,在理解一个特定函数时遇到了一些困难 我有这个功能: fun isInRow (r:int) ((x,y)) = x=r; 我很乐意得到一些解释: 函数接受什么和返回什么 (r:int)((x,y))之间的关系是什么 非常感谢 函数isInRow有两个参数。第一个名为r。第二个是一对(x,y)。类型归属(r:int)表示r必须是int 这个函数是curry函数,这对于SML来说有点不寻常。粗略地说,这意味着它接受单独给出的参数,而不是成对提供的参数 因此,函数接受一个

您好,我开始用sml写东西,在理解一个特定函数时遇到了一些困难

我有这个功能:

fun isInRow (r:int) ((x,y)) = x=r;
我很乐意得到一些解释:

  • 函数接受什么和返回什么

  • (r:int)
    ((x,y))
    之间的关系是什么


  • 非常感谢

    函数
    isInRow
    有两个参数。第一个名为
    r
    。第二个是一对
    (x,y)
    。类型归属
    (r:int)
    表示r必须是int

    这个函数是curry函数,这对于SML来说有点不寻常。粗略地说,这意味着它接受单独给出的参数,而不是成对提供的参数

    因此,函数接受一个int和一对int,它们的第一个元素是int。它们被作为单独的参数接受。它返回一个布尔值(比较的结果
    x=r

    对函数的调用如下所示:

    isInRow 3 (3, 4)
    

    关于咖喱还有很多要说的(这有点酷),但我希望这足够让你开始了。

    函数
    isInRow
    有两个参数。第一个名为
    r
    。第二个是一对
    (x,y)
    。类型归属
    (r:int)
    表示r必须是int

    这个函数是curry函数,这对于SML来说有点不寻常。粗略地说,这意味着它接受单独给出的参数,而不是成对提供的参数

    因此,函数接受一个int和一对int,它们的第一个元素是int。它们被作为单独的参数接受。它返回一个布尔值(比较的结果
    x=r

    对函数的调用如下所示:

    isInRow 3 (3, 4)
    

    关于咖喱还有很多要说的(有点酷),但我希望这足以让你走。

    除了杰弗里所说的

    • 您不需要额外的一组括号:

      fun isInRow (r:int) (x,y) = x=r;
      
    • 您不需要指定类型
      :int
      。如果你改写:

      fun isInRow r (x,y) = x=r;
      
      然后函数的类型从int更改→ (国际•'a)→ bool变成'a→ (“a”•“b”)→ bool,这意味着
      r
      x
      可以有任何类型可以进行相等比较(不仅仅是int),而
      y
      仍然可以是任何类型,因为它仍然被忽略

      多态函数是类型化函数语言(如SML)的优势之一

    • 您甚至可以不给
      y
      起名字:

      fun isInRow r (x,_) = x=r;
      

      • 除了杰弗里所说的

        • 您不需要额外的一组括号:

          fun isInRow (r:int) (x,y) = x=r;
          
        • 您不需要指定类型
          :int
          。如果你改写:

          fun isInRow r (x,y) = x=r;
          
          然后函数的类型从int更改→ (国际•'a)→ bool变成'a→ (“a”•“b”)→ bool,这意味着
          r
          x
          可以有任何类型可以进行相等比较(不仅仅是int),而
          y
          仍然可以是任何类型,因为它仍然被忽略

          多态函数是类型化函数语言(如SML)的优势之一

        • 您甚至可以不给
          y
          起名字:

          fun isInRow r (x,_) = x=r;