Lambda 部分函数应用程序中的语法错误
我试图在SMLNJ中使用操纵的lambda表达式,由于某种原因,它会引起错误。我的“program.sml”中的代码: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; 这意味着它是一个高阶
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;