为什么这个标准 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 fhreturn的函数)应用于函数g。请注意h return 的函数是将函数(例如g)作为输入和return 整数(例如11)作为输出的函数。

作为最后的提示,您如何使用两个简单函数 fg 从数字 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