如何解决在SML
下面的函数 1) 中的表达式 'f 7' 的含义不清楚。除非我使用函数 3) ,该函数始终评估为 false ,否则它将始终解析为 true 。也就是说,当我通过它时,函数 2) 和函数 2) 应该解析为 false ,即,当x fn x => 3 x *-执行失败。我认为可能有些明显的东西我很想念...任何提示将不胜感激。
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
解决方法
除非我使用函数3),该函数始终计算为false,否则始终解析为true。
以这个例子为例:
- fun is_even x = (x mod 2 = 0);
- double_or_triple is_even 2;
> val it = 6 : int
您可以通过手动评估以下内容:
double_or_triple is_even 2
~> (if is_even 7 then fn x => 2*x else fn x => 3*x) 2
~> (if (7 mod 2 = 0) then fn x => 2*x else fn x => 3*x) 2
~> (if (1 = 0) then fn x => 2*x else fn x => 3*x) 2
~> (if false then fn x => 2*x else fn x => 3*x) 2
~> (fn x => 3*x) 2
~> 3*2
~> 6
~>
是手工制作的缩图。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。