您好我开始用sml编写,我在理解特定函数时遇到了一些困难。
我有这个功能:
fun isInRow (r:int) ((x,y)) = x=r;
我很乐意对某些问题进行解释:
该函数接受的内容及其返回的内容。
(r: int)
((x, y))
之间的关系是什么。
非常感谢!!!
答案 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 ,这意味着r
和x
可以拥有任何可以比较相等的类型(不仅仅是int),y
仍然可以是任何类型,因为它仍然被忽略。
多态函数是类型化函数语言(如SML)的优势之一。
您甚至可以避免给y
一个名字:
fun isInRow r (x,_) = x=r;