私は関数型プログラミングでは新しいですが、私は特に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([(年、月、日)]、monthEntered) number_in_month([(2017,2,1)、(2015,2,3)、(2012,1,2)]、 2)リストの最初と2番目の項目がmonthEnteredに等しいため、出力は2でなければなりません。
私のコードの問題は、入力した日付のすべてが入力した月と等しい場合でも、出力されるのはちょうど1です。なぜ私はそれがちょうど1を出力し、私はそれを修正する必要があります知ってほしいです。ありがとうございます:D
あなたはあなたが機能的にではなく命令的に考えていることを意味する可変値の観点から考えています。もちろん値に1を加えることはできますが、(SMLの純粋な機能部分を使って)値を現在の値よりも1だけ大きくなるように変更することはできません。 –
私は機能プログラミングに新しい、この問題にどのように対処すべきですか?あなたが私にそれを理解することができる例またはリンクを与えることができますか:Dありがとう:) –