SML 中一个函数中的多个 if 语句
Multiple if statemens in one Function in SML
我想用 SML 编写一个函数来检查参数 a
、b
、c
是否为 true
,如果是,则增加值x
与 1.0
、2.0
或 3.0
。
例如:
fun calc(a:bool, b:bool, c:bool, d:int) =
let
val x = 0.0
in
if a then x+1.0 else x+0.0
;if b then x+2.0 else x+0.0
;if c then x+3.0 else x+0.0
;if d<120 then x+4.0 else x+0.0
end
如果我 运行 此代码带有 a
、b
和 c
true
和 d < 120
,那么我得到输出:
val it = 0.0 : real
但我想得到输出 x
。
首先,在一个函数定义中有多个if
表达式是没有问题的。例如,以下是没有问题的:
fun sign x = if x < 0 then ~1
else if x = 0 then 0
else 1;
请注意,if ... then ... else
是一个产生值的表达式,而不是控制结构。在那个 in
块中有几个独立的 if
表达式,用分号分隔。当您在这样的 in
块中有多个表达式时,它们会按顺序计算,最后一个表达式的结果是该块的总值。这仅在早期表达式有副作用时才有意义(例如,将某些内容打印到终端或使用 ref
变量修改商店)。在您的情况下,您的表达式没有副作用,您只是丢弃值(最后一个值除外)。
您似乎想要一系列的 val 绑定,其中后面的绑定依赖于前面的绑定。这可以做到,但它需要在构造的 let
部分而不是 in
部分。类似于:
fun calc(a:bool, b:bool, c:bool, d:int) =
let
val x = 0.0
val x = if a then x+1.0 else x
val x = if b then x+2.0 else x
val x = if c then x+3.0 else x
in
if d<120 then x+4.0 else x
end
例如:
- calc(false,false,true,119);
val it = 7.0 : real
您可以通过编写辅助函数更直接地做到这一点:
fun f(a,x) = if a then x else 0.0;
然后:
fun calc(a,b,c,d) =
let
val x = f(a,1.0) + f(b,2.0) + f(c,3.0)
in
if d < 120 then x + 4.0 else x
end
我想用 SML 编写一个函数来检查参数 a
、b
、c
是否为 true
,如果是,则增加值x
与 1.0
、2.0
或 3.0
。
例如:
fun calc(a:bool, b:bool, c:bool, d:int) =
let
val x = 0.0
in
if a then x+1.0 else x+0.0
;if b then x+2.0 else x+0.0
;if c then x+3.0 else x+0.0
;if d<120 then x+4.0 else x+0.0
end
如果我 运行 此代码带有 a
、b
和 c
true
和 d < 120
,那么我得到输出:
val it = 0.0 : real
但我想得到输出 x
。
首先,在一个函数定义中有多个if
表达式是没有问题的。例如,以下是没有问题的:
fun sign x = if x < 0 then ~1
else if x = 0 then 0
else 1;
请注意,if ... then ... else
是一个产生值的表达式,而不是控制结构。在那个 in
块中有几个独立的 if
表达式,用分号分隔。当您在这样的 in
块中有多个表达式时,它们会按顺序计算,最后一个表达式的结果是该块的总值。这仅在早期表达式有副作用时才有意义(例如,将某些内容打印到终端或使用 ref
变量修改商店)。在您的情况下,您的表达式没有副作用,您只是丢弃值(最后一个值除外)。
您似乎想要一系列的 val 绑定,其中后面的绑定依赖于前面的绑定。这可以做到,但它需要在构造的 let
部分而不是 in
部分。类似于:
fun calc(a:bool, b:bool, c:bool, d:int) =
let
val x = 0.0
val x = if a then x+1.0 else x
val x = if b then x+2.0 else x
val x = if c then x+3.0 else x
in
if d<120 then x+4.0 else x
end
例如:
- calc(false,false,true,119);
val it = 7.0 : real
您可以通过编写辅助函数更直接地做到这一点:
fun f(a,x) = if a then x else 0.0;
然后:
fun calc(a,b,c,d) =
let
val x = f(a,1.0) + f(b,2.0) + f(c,3.0)
in
if d < 120 then x + 4.0 else x
end