任何人都可以向我解释并帮助我理解为什么以下表达式在标准ML中等于11?非常感谢任何帮助。
(fn f => (fn g => f(g 2))) (fn n => n+3) (fn n => n*4)
答案 0 :(得分:3)
您可以评估表达式:
(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)
同样,将g
替换为(fn n => n*4)
,使其成为
(fn n => n+3)((fn n => n*4) 2)
同样,将第一个n
替换为((fn n => n*4) 2)
,或将第二个n
替换为2
。
答案 1 :(得分:2)
因为这看起来像是家庭作业,所以我不想做更多的事情。
你可以做的一件事就是消除一些lambda表达式,转而使用显式函数定义。
例如:
fun h f = (fn g => f(g 2))
fun f n = n + 3
fun g n = n*4
然后 - 看看你是否可以解释为什么h f g
评估为11
。
另一个提示,ML函数应用程序是左关联的,因此h f g
与
(h f) g
这意味着应用于函数h f
的函数 h
(g
返回函数)。请注意,h
返回的函数是将函数(例如g
)作为输入并将整数(例如11)作为输出的函数。
作为最后的提示,如何使用两个简单函数f
和g
从数字2到数字11?