SML: syntax error: replacing LET with RAISE
SML: syntax error: replacing LET with RAISE
我正在编写一个函数,它采用 (d, m, y) 格式的日期。我需要计算 rez 值,所有这些 +getNthInt 函数调用都是从列表中添加某些元素。
fun firstNewMoonInt ((d, m, y) : int * int * int) : int option =
let
if m = 1 orelse m = 2 then y - 1
else y
val rez = newStyleCorrection (d, m, y) * 100000
+ getNthInt(thousandCorrection, y div 1000)
+ getNthInt (hundredCorrection, y div 100 mod 10)
+ getNthInt (decadeCorrection, y mod 100 div 10)
+ getNthInt (yearCorrection, y mod 1000)
+ getNthInt (monthCorrection, m - 1)
+ getNthInt (calendarCorrection, y mod 4)
rez - lastSmaller(rez - 100000, reductions)
in
if rez div 100000 <= 30 then SOME rez
else NONE
end
我遇到两个语法错误:
2.3-2.6 Error: syntax error: replacing LET with RAISE
13.3 Error: syntax error: inserting LET
因为我在构造中使用了所有关键字:let-in-end、if-then-else。我不明白,我的代码有什么问题?
在 let
内,应该有一系列的声明。 (声明类似于 val x = ...
或 fun f x = ...
)。但是在您的代码中,有一个 if
开始一个表达式。
您可以通过创建一个新变量来解决此问题,该变量是 if
表达式的结果:
let
val new_y =
if m = 1 orelse m = 2 then y - 1
else y
val rez = ...
然后您需要找出在其余代码中使用 new_y
的位置。
请注意,再往下几行就有一个类似的问题:
rez - lastSmaller(rez - 100000, reductions)
这是一个应该有另一个声明的表达式。您也可以用同样的方式修复它:val new_rez = rez - lastSmaller (...)
然后在下面适当的地方使用 new_rez
。
我正在编写一个函数,它采用 (d, m, y) 格式的日期。我需要计算 rez 值,所有这些 +getNthInt 函数调用都是从列表中添加某些元素。
fun firstNewMoonInt ((d, m, y) : int * int * int) : int option =
let
if m = 1 orelse m = 2 then y - 1
else y
val rez = newStyleCorrection (d, m, y) * 100000
+ getNthInt(thousandCorrection, y div 1000)
+ getNthInt (hundredCorrection, y div 100 mod 10)
+ getNthInt (decadeCorrection, y mod 100 div 10)
+ getNthInt (yearCorrection, y mod 1000)
+ getNthInt (monthCorrection, m - 1)
+ getNthInt (calendarCorrection, y mod 4)
rez - lastSmaller(rez - 100000, reductions)
in
if rez div 100000 <= 30 then SOME rez
else NONE
end
我遇到两个语法错误:
2.3-2.6 Error: syntax error: replacing LET with RAISE
13.3 Error: syntax error: inserting LET
因为我在构造中使用了所有关键字:let-in-end、if-then-else。我不明白,我的代码有什么问题?
在 let
内,应该有一系列的声明。 (声明类似于 val x = ...
或 fun f x = ...
)。但是在您的代码中,有一个 if
开始一个表达式。
您可以通过创建一个新变量来解决此问题,该变量是 if
表达式的结果:
let
val new_y =
if m = 1 orelse m = 2 then y - 1
else y
val rez = ...
然后您需要找出在其余代码中使用 new_y
的位置。
请注意,再往下几行就有一个类似的问题:
rez - lastSmaller(rez - 100000, reductions)
这是一个应该有另一个声明的表达式。您也可以用同样的方式修复它:val new_rez = rez - lastSmaller (...)
然后在下面适当的地方使用 new_rez
。