Function 为什么这个标准ML表达式等于11?

Function 为什么这个标准ML表达式等于11?,function,pattern-matching,anonymous-function,sml,smlnj,Function,Pattern Matching,Anonymous Function,Sml,Smlnj,有人能给我解释一下并帮助我理解为什么下面的表达式在标准ML中等于11吗?非常感谢您的帮助 (fn f => (fn g => f(g 2))) (fn n => n+3) (fn n => n*4) 因为这看起来像是家庭作业,我只想给你一个提示 您可以做的一件事是删除一些lambda表达式,以支持显式函数定义 例如: fun h f = (fn g => f(g 2)) fun f n = n + 3 fun g n = n*4 然后——看看你是否能猜出为什

有人能给我解释一下并帮助我理解为什么下面的表达式在标准ML中等于11吗?非常感谢您的帮助

(fn f => (fn g => f(g 2))) (fn n => n+3) (fn n => n*4)

因为这看起来像是家庭作业,我只想给你一个提示

您可以做的一件事是删除一些lambda表达式,以支持显式函数定义

例如:

fun h f = (fn g => f(g 2))

fun f n = n + 3

fun g n = n*4
然后——看看你是否能猜出为什么
hfg
的计算结果是
11

另一个提示是,在ML函数中,应用程序是左关联的,因此
hfg

(h f) g 
这意味着应用于函数
g
的函数
hf
h
返回函数)。请注意,
h
返回的函数是将函数(如
g
)作为输入并返回整数(如11)作为输出的函数


作为最后一个提示,您将如何使用两个简单的函数从数字2到数字11?f和
g

既然这看起来像是家庭作业,我只想给出一个提示

您可以做的一件事是删除一些lambda表达式,以支持显式函数定义

例如:

fun h f = (fn g => f(g 2))

fun f n = n + 3

fun g n = n*4
然后——看看你是否能猜出为什么
hfg
的计算结果是
11

另一个提示是,在ML函数中,应用程序是左关联的,因此
hfg

(h f) g 
这意味着应用于函数
g
的函数
hf
h
返回函数)。请注意,
h
返回的函数是将函数(如
g
)作为输入并返回整数(如11)作为输出的函数


作为最后一个提示,使用两个简单的函数
f
g

可以计算表达式,从数字2到数字11是如何得到的:

(fn f => (fn g => f(g 2))) (fn n => n+3) (fn n => n*4)
这里,将
f
替换为
(fn n=>n+3)
,使其成为

(fn g => (fn n => n+3)(g 2)) (fn n => n*4)
(fn n => n+3)((fn n => n*4) 2)
同样,将
g
替换为
(fn n=>n*4)
,使其成为

(fn g => (fn n => n+3)(g 2)) (fn n => n*4)
(fn n => n+3)((fn n => n*4) 2)

类似地,将第一个
n
替换为
((fn n=>n*4)2)
,或将第二个
n
替换为
2
,您可以计算表达式:

(fn f => (fn g => f(g 2))) (fn n => n+3) (fn n => n*4)
这里,将
f
替换为
(fn n=>n+3)
,使其成为

(fn g => (fn n => n+3)(g 2)) (fn n => n*4)
(fn n => n+3)((fn n => n*4) 2)
同样,将
g
替换为
(fn n=>n*4)
,使其成为

(fn g => (fn n => n+3)(g 2)) (fn n => n*4)
(fn n => n+3)((fn n => n*4) 2)

同样地,将第一个
n
替换为
((fn n=>n*4)2)
,或者将第二个
n
替换为
2

,顺便说一句,你可能想修改你关于堆栈溢出的问题风格,从已经提出的更一般的问题和答案中汲取经验。在“为什么是11?”和“为什么是11”之间有某种缺失的联系,而编写优秀问题的艺术是在使问题变得足够具体(就像你所做的那样)和将问题概括到某一点之间的平衡,如果问题的表述稍有不同,例如,如果结果不是11,则可以使用答案(从而找到答案)。-)顺便说一句,您可能想修改StackOverflow上的问题风格,从已经提出的更一般的问题和答案中汲取经验。在“为什么是11?”和“为什么是11”之间有某种缺失的联系,而编写优秀问题的艺术是在使问题变得足够具体(就像你所做的那样)和将问题概括到某一点之间的平衡,如果问题的表述稍有不同,例如,如果结果不是11,则可以使用答案(从而找到答案)。-)