質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Haskell

Haskellは高い機能性をもった関数型プログラミング言語で、他の手続き型プログラミング言語では難しいとされている関数でも容易に行うことができます。強い静的型付け、遅延評価などに対応しています。

再帰

情報工学における再帰とは、プログラムのあるメソッドの処理上で自身のメソッドが再び呼び出されている処理の事をいいます。

Q&A

解決済

1回答

433閲覧

Haskellでrangeのforみたいなやり方について

Bolshikh_i_mal

総合スコア32

Haskell

Haskellは高い機能性をもった関数型プログラミング言語で、他の手続き型プログラミング言語では難しいとされている関数でも容易に行うことができます。強い静的型付け、遅延評価などに対応しています。

再帰

情報工学における再帰とは、プログラムのあるメソッドの処理上で自身のメソッドが再び呼び出されている処理の事をいいます。

0グッド

0クリップ

投稿2018/08/20 21:19

再帰の考え方がいまいちよくわからないのですが
例えば
pythonの

x = 10 y = 0 for line in range(x): y +=1

ってどうやるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

y を戻り値とする関数として行うなら例えば ???? ですね。

loop 10 y = y loop x y = loop (x + 1) (y + 1)

という関数を定義した上で loop 0 0 を呼ぶと x10 に近づくまでの間に y を一つずつ増やす、という処理を表現できます。

パターンマッチが難しいと感じた場合は、下記のようにも書けるので、参考にしてください。

loop x y = if x == 10 then y else loop (x + 1) (y + 1)

いずれにしてもポイントは、ループの中で書き換えている変数を、新しい値に書き換える代わりに、「次の関数呼び出し」の際、引数として新しい値を渡すことです。

関数型プログラミングスタイルでは、状態を書き換える代わりに、新しい引数として関数に渡す、というのが伝われば幸いです。

投稿2018/08/20 23:42

編集2018/08/21 03:42
igrep

総合スコア428

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Bolshikh_i_mal

2018/08/21 06:27 編集

とっても分かりやすいです。ありがとうございました! ちょっと待ってください、 then って何ですか?
igrep

2018/08/21 06:45

Python の if で言えば if x == 10: ... else: ... のコロン 「:」に該当するものと、言えば通じるでしょうか? ifの「条件」 (上記で言えば「x == 10」)と「真の場合」を区切るためのキーワードです。 入門資料を読めば必ず出てくるかと思いますが、 Haskellのifは必ず if 条件 then 真の場合 else 偽の場合 という形式で書きます。 実際には改行を挟まなくて良いので、 if 条件 then 真の場合 else 偽の場合 という書き方でも良いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問