理解sml语言中的语法

时间:2018-01-09 19:34:08

标签: function syntax sml

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

我有这个功能:

fun isInRow (r:int) ((x,y)) = x=r;

我很乐意对某些问题进行解释:

  1. 该函数接受的内容及其返回的内容。

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

  3. 非常感谢!!!

2 个答案:

答案 0 :(得分:3)

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

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

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

对函数的调用如下所示:

isInRow 3 (3, 4)

还有更多关于currying的说法(这很酷),但我希望这足以让你前进。

答案 1 :(得分:1)

除了杰弗里所说的,

  • 您不需要额外的括号:

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

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

    然后函数将 int→(int•' a)→bool 中的类型更改为 &#39 ;' a→('' a•' b)→bool ,这意味着rx可以拥有任何可以比较相等的类型(不仅仅是int),y仍然可以是任何类型,因为它仍然被忽略。

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

  • 您甚至可以避免给y一个名字:

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