buto > /dev/null

だいたい急に挑戦してゴールにたどり着かずに飽きる日々です

Haskell はじめての再帰

Haskellにはループがない

Haskellにはfor文、while文といったループがありません 「そうなんだ~」くらいにしか思ってなかったけど、改めてループ処理の目的を考えると 変数の状態を変化させることですよね!

JavaだとDBから取得したエンティティをループに入れて Beanクラスのプロパティにセットするコードをよく書きます それもループ処理の前に用意した「データリスト」変数にループでデータをaddしてるので 「データリスト」変数の状態がどんどん変わっていってます

Javaと違ってHaskellにはfinal変数しかありません(定数ですね) 宣言された変数は再代入できない → 状態が変わることがありません だからループ処理がありません

関数の再帰呼び出し

「1+2+3」のように「1+2」した結果に「+3」する計算は関数の再帰呼び出しで書きます

Haskell 初心者なので簡単なコードしか書けません。。。

calc :: Int -> Int -> Int
calc x y = x + y

main = print (calc (calc 1 2) 3)
  1. calc 1 2が実行
  2. calc 3 3が実行
  3. print 6が実行

Java シンプルfor文って書くこと少なくなりましたね!!

int x = 0;
for (int i=1; i<4; i++){
    x += i;
}
System.out.print(x);

やっぱりJavaは読みやすい! まだまだfor文から親離れできない感じです