Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Functional programming 此语句揭示了SML中函数f的哪些信息?_Functional Programming_Sml_Smlnj - Fatal编程技术网

Functional programming 此语句揭示了SML中函数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,其中包含两

关于函数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
,其中包含两个变量(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