【发布时间】:2018-04-11 10:35:07
【问题描述】:
我想在 SML 中编写一个函数来检查参数 a、b、c 是否为 true,如果是,则将 x 的值增加为 1.0、@987654327 @ 或 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 a而不是if a=true?其他子句也一样。 -
谢谢。不知道我可以这样写。
-
由于
in和end之间的前三个表达式没有副作用,因此这些语句没有效果,整个块相当于if d<120 then x+4.0 else x+0.0。您是否打算在这些子句中修改x的值?似乎是——但你是在命令式而不是功能上思考。另外——“将输出作为x”是什么意思? -
我想获取 x 的值。例如,如果我调用函数 calc(false,false,true,119) => 7.0.
-
您需要在
let部分有几个连续的val绑定(不需要分号),然后在in部分有一个表达式。
标签: function if-statement standards sml ml