SML中的函数只有一个参数是什么意思?

SML中的函数只有一个参数是什么意思?,sml,Sml,所以我读到SML中的每个函数都有一个参数和一个 后果但我看到了这样的例子: fun foo x y = x + y; fun goo x y z = 5; 这些例子让我觉得他们有不止一个论点。 签名: val foo = fn : int -> int -> int val goo = fn : 'a -> 'b -> 'c -> int 我能想到的唯一可能的解释是“句法上的糖分”,尽管我不确定。对此的解释是什么?虽然您的示例似乎包含多个参数,但实际上一次只包含

所以我读到
SML
中的每个函数都有一个参数和一个 后果但我看到了这样的例子:

fun foo x y = x + y;
fun goo x y z = 5;
这些例子让我觉得他们有不止一个论点。 签名:

val foo = fn : int -> int -> int
val goo = fn : 'a -> 'b -> 'c -> int

我能想到的唯一可能的解释是“句法上的糖分”,尽管我不确定。对此的解释是什么?

虽然您的示例似乎包含多个参数,但实际上一次只包含一个参数

foo 1
返回一个以
y
为参数的函数,然后在应用
y
时,该函数进行计算

goo 1
返回一个取
y
的函数,给定时返回一个取
z
的函数,给定时允许函数进行计算

这使您可以通过提供比要求更少的参数来轻松地部分应用函数:

val f = foo 1 (* Returns a function *)
val returnVal = f 2 (* Both arguments were given, so the function is fully applied and evaluates *)
当与
map
List.filter
等函数结合使用时,您可以生成可读性好的代码:

val keepNegatives = List.filter isNeg

keepNegatives [~1, ~2, 1, ~3]
> [~1, ~2, ~3]

其中,
isNeg
是一个检查数字是否为负数的谓词,
List.filter
是一个函数,用于保留集合中满足给定谓词的元素。

尽管示例似乎采用了多个参数,但它们实际上一次只采用一个参数

foo 1
返回一个以
y
为参数的函数,然后在应用
y
时,该函数进行计算

goo 1
返回一个取
y
的函数,给定时返回一个取
z
的函数,给定时允许函数进行计算

这使您可以通过提供比要求更少的参数来轻松地部分应用函数:

val f = foo 1 (* Returns a function *)
val returnVal = f 2 (* Both arguments were given, so the function is fully applied and evaluates *)
当与
map
List.filter
等函数结合使用时,您可以生成可读性好的代码:

val keepNegatives = List.filter isNeg

keepNegatives [~1, ~2, 1, ~3]
> [~1, ~2, ~3]

其中,
isNeg
是一个检查数字是否为负数的谓词,而
List.filter
是一个函数,用于保留满足给定谓词的集合中的元素。

确实涉及一些语法糖。如果我没记错的话

fun foo x y = x + y
只是语法上的糖

val rec foo = fn x => (fn y => x + y)
所以这个定义实际上定义了一个函数
foo
,它接受一个
int
类型的
x
,并返回一个
int->int
类型的函数。因此函数应用程序
foo5
返回一个函数:

fn y => 5 + y

这个返回的函数当然也可以接受一个参数。这看起来像是第二个论点。但是请注意,这个参数不是
foo
的参数,而是我们将
foo
应用到它的单个参数时得到的结果的参数。

确实涉及到一些语法糖。如果我没记错的话

fun foo x y = x + y
只是语法上的糖

val rec foo = fn x => (fn y => x + y)
所以这个定义实际上定义了一个函数
foo
,它接受一个
int
类型的
x
,并返回一个
int->int
类型的函数。因此函数应用程序
foo5
返回一个函数:

fn y => 5 + y

这个返回的函数当然也可以接受一个参数。这看起来像是第二个论点。但请注意,此参数不是
foo
的参数,而是将
foo
应用于其单个参数时得到的结果的参数。

->
关联到右侧
int->int->int
表示
int->(int->int)
–一个函数,它接受
int
并生成
int->int
函数。
->
关联到右侧
int->int->int
是指
int->(int->int)
——一个函数,它接受
int
并生成
int->int
函数。