我大学的课程我必须学习SML。我现在学习了Java并且遇到了我的SML问题。我有这个功能,应该只为动物园计算一个入口费。
fun calcEntryFee (erm:bool,dauer:int,dschungel:bool,gebtag:bool):real=
let
val c = 7.0
in
if erm then c + 14.50 else c + 19.50;
if dauer < 120 then c - 4.0 else c;
if dschungel then c + 1.5 else c;
if gebtag then c / 2.0 else c
end;
问题在于此功能会返回&#39; 7.0或3.5。但似乎没有执行其他3个if语句。
答案 0 :(得分:6)
ML中没有任何陈述,只有表达式。即使A;B
也是一个表达式,它会评估A
和B
,其结果是B
的结果。因此,你的前3个if-expression的结果就会被抛弃。
此外,变量是真正数学意义上的变量,因此它们是不可变的。将程序视为数学公式。
您可能想要写的内容如下:
fun calcEntryFee (erm : bool, dauer : int, dschungel : bool, gebtag : bool) : real =
let
val fee =
7.0
+ (if erm then 14.50 else 19.50)
- (if dauer < 120 then 4.0 else 0.0)
+ (if dschungel then 1.5 else 0.0)
in
if gebtag then fee / 2.0 else fee
end