【发布时间】:2021-01-23 07:05:02
【问题描述】:
下面函数 1) 中表达式 'f 7' 的含义我不清楚。除非我使用函数 3),它总是评估为 false,它总是解析为 真的。也就是说,当我传递它时,函数 2) 和函数 2) 应该解析为 false,即当 x fn x => 3x*--执行失败。我认为我可能遗漏了一些明显的东西......任何提示将不胜感激。
1)
fun double_or_triple f =
if f 7
then fn x => 2*x
else fn x => 3*x
fun st x = if x > 0 then true else false
fun always_false (x:int) = false;
附录: 将 @Simon Shine 的方法与函数 2) 一起使用可以完全清楚发生了什么:
double_or_triple st 6
-> (if st 7 then fn x => 2 * x else fn x => 3 * x) 6
-> (if (if (7 > 0) then true else false) then fn x => 2 * x else fn x => 3 * x) 6
-> (if (if true then true else false) then fn x => 2 * x else fn x => 3 * x) 6
-> (if true then fn x => 2 * x else fn x => 3 * x) 6
-> (fn x => 2 * x) 6
-> 2*6
-> 12
【问题讨论】:
-
x在第二个函数中是7,即(总是)> 0。您需要传递与st不同的函数,该函数为输入false返回7,以获得三倍函数。 -
重命名第二个函数的参数
x可能有助于理解,例如到fun st y = y > 0 -
@Bergi 这是有道理的。 “7”很明显。它是一个文字值,而不是任何 int 的占位符。出于某种原因,我一直在思考这些问题......谢谢。
-
请注意,
if x > 0 then true else false与x > 0是等价的。 -
@Simon Shine 指出 -- 谢谢。
标签: functional-programming sml