即时通讯功能编程的新功能,但我有专门针对Java的命令编程经验。我想问一个值如何迭代在smlnj我知道,在Java上,你可以使用varName + = anyNumber或varName = varName + 1.在smlnj我不知道如何做到这一点,我的var值不迭代在这里是一个我的代码示例。提前致谢。smlnj如何迭代一个值
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,因为列表中的第一个和第二个项目等于monthEntered。
我的代码中的问题是它只是输出1,即使我输入的所有日期都等于我输入的月份。我只想知道为什么它只输出1,我应该如何解决它。在此先感谢:D
你正在从可变价值的角度思考,这意味着你在考虑命令而不是在功能上。您当然可以将1加1,但您不能(通过使用SML的纯功能部分)导致值发生变异,从而变得比当前值多1。 –
对不起,即时通讯函数式编程,我应该如何处理这个问题?你能给我一个例子或链接,我可以理解它:D谢谢:) –