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

时间:2017-04-03 18:06:03

标签: function pattern-matching anonymous-function sml smlnj

任何人都可以向我解释并帮助我理解为什么以下表达式在标准ML中等于11?非常感谢任何帮助。

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

2 个答案:

答案 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函数 hg返回函数)。请注意,h返回的函数是将函数(例如g)作为输入并将整数(例如11)作为输出的函数。

作为最后的提示,如何使用两个简单函数fg从数字2到数字11?