Lambda 部分函数应用程序中的语法错误

Lambda 部分函数应用程序中的语法错误,lambda,sml,smlnj,ml,Lambda,Sml,Smlnj,Ml,我试图在SMLNJ中使用操纵的lambda表达式,由于某种原因,它会引起错误。我的“program.sml”中的代码: fun add x y=x+y;//(val plus,而不是fun plusfun plus是通过给出函数体来定义函数的特殊语法;val plus表示“将名称plus定义为右侧的任何内容”,在这种情况下,它恰好是一个函数。 fn: int -> int -> int 您(正确)定义了一个函数。它的类型是 val plus = add 1; 这意味着它是一个高阶

我试图在SMLNJ中使用操纵的lambda表达式,由于某种原因,它会引起错误。我的“program.sml”中的代码:


fun add x y=x+y;//(
val plus
,而不是
fun plus
fun plus
是通过给出函数体来定义函数的特殊语法;
val plus
表示“将名称
plus
定义为右侧的任何内容”,在这种情况下,它恰好是一个函数。

fn: int -> int -> int
您(正确)定义了一个函数。它的类型是

val plus = add 1;
这意味着它是一个高阶函数,以
int
作为输入,并返回
int->int
作为输出的函数

现在只需使用此函数定义一个新值,
plus
(它本身就是一个函数)

因此(正如@jacobm已经指出的),只需使用:

微妙之处在于SML中的函数是“一流的值”。除了使用
fun
在顶级定义它们之外,您还可以自由创建它们并将它们作为普通值传递。以通用形式定义函数的原因之一(您定义
add
的方式)您可以将其用作函数工厂,用于根据需要创建函数,而无需显式定义它们


顺便说一句,你问题的标题有点误导。在SML中,“lambda表达式”一词通常是为使用
fn
创建的匿名函数保留的。lambda演算语法
向其输入中添加一个函数的函数可以称为
incr
succ
val plus = add 1;