【发布时间】:2021-11-06 03:54:55
【问题描述】:
我正在编写一个函数,它以 (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。我不明白,我的代码有什么问题?
【问题讨论】:
-
您好,只是小费。我建议为了调试这个,你最小化问题。即尝试删除东西,直到它起作用或足够小。现在函数相当复杂,很难发现问题。
-
您希望表达式
if m = 1 orelse m = 2 then y - 1 else y和rez - lastSmaller(rez - 100000, reductions)在变量绑定中完成什么?您可能应该查看let块的用途以及它可以包含的内容。 -
@molbdnilo 基本上 if 语句意味着如果月份值等于 1 或 2,那么我需要从年份值中减去 1,否则年份值保持不变。只有在检查后,我才能开始计算 rez 变量。在我执行了一堆 + 操作之后,我需要获取当前的 rez 值并从中减去我使用函数 lastSmaller 获得的另一个值
-
忘记分配存在。事实上,别忘了还有其他你用过的编程语言——SML 与 Python 等语言有着根本的不同,而且在没有偏见的情况下更容易学习。
标签: sml