Functional programming 此语句揭示了SML中函数f的哪些信息?
关于函数f,下一行怎么说Functional programming 此语句揭示了SML中函数f的哪些信息?,functional-programming,sml,smlnj,Functional Programming,Sml,Smlnj,关于函数f,下一行怎么说 (*function f's definition*) fun f l j y = l j y val f = fn : ('a -> 'b -> 'c) -> 'a -> 'b -> 'c 要回答此问题,请重命名标识符: val f = fn : ('a -> 'b -> 'c) -> 'a -> 'b -> 'c apply相当于您正在调用的f。非正式地说,apply的作用是取一个函数,g,其中包含两
(*function f's definition*)
fun f l j y = l j y
val f = fn : ('a -> 'b -> 'c) -> 'a -> 'b -> 'c
要回答此问题,请重命名标识符:
val f = fn : ('a -> 'b -> 'c) -> 'a -> 'b -> 'c
apply
相当于您正在调用的f
。非正式地说,apply的作用是取一个函数,g
,其中包含两个变量(in)和两个参数x,y
,并实际将g应用于这些参数
例如g
,定义:
fun apply g x y = g x y;
val apply = fn : ('a -> 'b -> 'c) -> 'a -> 'b -> 'c
然后,例如:
fun sum x y = x + y;
val sum = fn : int -> int -> int
在的类型签名中应用
零件
apply sum 5 7;
val it = 12 : int
是g
的类型。它是多态的。您可以将任何函数应用于适当类型的参数。当您实际使用apply
(正如我在上面使用sum
)时,SML编译器将有足够的信息来确定哪些具体类型对应于类型变量'a,'b,'c
。应用的总体类型是
('a -> 'b -> 'c)
也就是说,
apply
是一个函数,当馈送类型为('a->'b->'c)
的函数和类型为'a
和'b
的参数时,产生类型为'c
的结果。我不确定是否会立即使用apply
,尽管它确实有助于强调函数应用程序本身是一个高阶函数的观点。John coleman。非常感谢。我正在学习SML,我很难理解它。你能告诉我一些教程或其他方法吗?我可以从中了解更多关于continuation的知识。与Scheme等一些函数式语言不同,continuation不是SML的一部分——尽管SML/NJ等SML的各种实现都提供了自己的实现(例如SMLofNJ.Cont.callcc)。我一个也没试过。你可以发布另一个问题,有经验的人可以回答。在发布其他问题之前,请参阅以下内容:
('a -> 'b -> 'c) -> 'a -> 'b -> 'c