为什么这个标准 ML 表达式等于 11?
Why does this Standard ML expression equal 11?
任何人都可以向我解释并帮助我理解为什么以下表达式在标准 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
然后 - 看看您是否能弄清楚为什么 h f g
的计算结果为 11
。
作为另一个提示,在 ML 函数应用程序中是左关联的,因此 h f g
与
相同
(h f) g
这意味着函数h f
(h
return的函数)应用于函数g
。请注意h
return 的函数是将函数(例如g
)作为输入和return 整数(例如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)
同样,将g
替换为(fn n => n*4)
,这样就变成了
(fn n => n+3)((fn n => n*4) 2)
同样,将第一个 n
替换为 ((fn n => n*4) 2)
或将第二个 n
替换为 2
。
任何人都可以向我解释并帮助我理解为什么以下表达式在标准 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
然后 - 看看您是否能弄清楚为什么 h f g
的计算结果为 11
。
作为另一个提示,在 ML 函数应用程序中是左关联的,因此 h f g
与
(h f) g
这意味着函数h f
(h
return的函数)应用于函数g
。请注意h
return 的函数是将函数(例如g
)作为输入和return 整数(例如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)
同样,将g
替换为(fn n => n*4)
,这样就变成了
(fn n => n+3)((fn n => n*4) 2)
同样,将第一个 n
替换为 ((fn n => n*4) 2)
或将第二个 n
替换为 2
。