【发布时间】:2022-03-07 06:47:56
【问题描述】:
我是函数式编程的新手,但我有专门的 java 命令式编程经验。我想问一个值如何在 smlnj 中迭代我知道在 java 上你可以使用 varName += anyNumber 或 varName = varName + 1。在 smlnj 上我不知道怎么做,我的 var 值没有迭代这里是我的代码示例。提前致谢。
fun number_in_month (dates : (int*int*int) list , month : int) =
let
val total = 0;
in
let
fun check(date : (int*int*int) list , m : int) =
if #2(hd(date)) = m
then total + 1 (* this is the problem in the code i don't know
how to iterate this like "varName += 1" in java *)
else check(tl(date),m)
in
check(dates,month)
end
end
此程序将检查输入的日期(在列表中)是否存在于输入的月份,并将输出该月存在的日期数。
例如:number_in_month ([(year,month,day)],monthEntered) number_in_month([(2017,2,1),(2015,2,3),(2012,1,2)],2) 输出必须为 2,因为列表中的第一项和第二项等于输入的月份。
我的代码中的问题是即使我输入的所有日期都等于我输入的月份,它也只是输出 1。我只想知道为什么它只输出 1 以及我应该如何修复它。在此先感谢:D
【问题讨论】:
-
你在思考可变值,这意味着你在思考命令式而不是函数式。你当然可以给一个值加 1,但你不能(通过使用 SML 的纯函数部分)使一个值发生变异,从而使其比其当前值多 1。
-
对不起,我是函数式编程的新手,我应该如何处理这个问题?你能给我一个我能理解的例子或链接吗:D 谢谢:)