Function SML-函数计算不正确

Function SML-函数计算不正确,function,if-statement,sml,Function,If Statement,Sml,在我的大学里,我必须学习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 d

在我的大学里,我必须学习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;
funcalcentryfee(erm:bool,dauer:int,dschungel:bool,gebtag:bool):真的=
允许
val c=7.0
在里面
如果是erm,则为c+14.50,否则为c+19.50;
如果dauer<120,则c-4.0,否则c;
如果是dschungel,则为c+1.5,否则为c;
如果是gebtag,则为c/2.0,否则为c
终止

问题是此函数“返回”7.0或3.5。但似乎不执行其他3条if语句。

ML中没有语句,只有表达式。偶数
A;B
是一个表达式,它计算
A
B
,其结果是
B
的结果。因此,前3个if表达式的结果将被丢弃

此外,变量是真正数学意义上的变量,因此它们是不可变的。将程序视为一个数学公式

您可能想写的内容如下:

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
funcalcentryfee(erm:bool,dauer:int,dschungel:bool,gebtag:bool):真的=
允许
瓦尔费=
7
+(如果是erm,则为14.50,否则为19.50)
-(如果dauer<120,则为4.0,否则为0.0)
+(如果是dschungel,则为1.5,否则为0.0)
在里面
如果是gebtag,则费用/2.0其他费用
终止

ML中没有语句,只有表达式。偶数
A;B
是一个表达式,它计算
A
B
,其结果是
B
的结果。因此,前3个if表达式的结果将被丢弃

此外,变量是真正数学意义上的变量,因此它们是不可变的。将程序视为一个数学公式

您可能想写的内容如下:

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
funcalcentryfee(erm:bool,dauer:int,dschungel:bool,gebtag:bool):真的=
允许
瓦尔费=
7
+(如果是erm,则为14.50,否则为19.50)
-(如果dauer<120,则为4.0,否则为0.0)
+(如果是dschungel,则为1.5,否则为0.0)
在里面
如果是gebtag,则费用/2.0其他费用
终止

非常感谢。这帮助我理解了这种语言的概念。非常感谢。非常感谢。这帮助我理解了这种语言的概念。非常感谢。