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

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

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

F#は、MicroSoftが開発した.NET Framework 向けのマルチパラダイムプログラミング言語です。 Visual Studio 2010 より標準搭載されました。

Q&A

解決済

1回答

722閲覧

F#のこのコードの読み方がわかりません

RyosukeSHIBATA

総合スコア11

F#

F#は、MicroSoftが開発した.NET Framework 向けのマルチパラダイムプログラミング言語です。 Visual Studio 2010 より標準搭載されました。

0グッド

1クリップ

投稿2020/05/03 04:09

このコードが読めません

printfn "%d" (let rec sum x = if x > 0 then x + sum (x - 1) else 0 sum 10)
私の理解ではelse 0 sum 10というところがどういう流れで書かれているかわかりません。
let rec sum x = if x > 0 then x + sum (x - 1) else 0の再帰関数を定義した後に、
sum 10を実行しているといった理解でいいんでしょうか?

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

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

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

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

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

Zuishin

2020/05/03 04:32

これコンパイルできますか? main から書くとどうなります?
guest

回答1

0

ベストアンサー

https://try.fsharp.org/ で動作確認しました。

正しくは let rec ... in ですね。

再帰関数を定義した後に、sum 10を実行しているといった理解でいいんでしょうか?

その通りです。ワンライナーになってるので読みにくいですが、

F#

1printfn "%d" (let rec sum x = if x > 0 then x + sum (x - 1) else 0 in sum 10)

余分に括弧を付けてlet束縛の範囲を分かりやすくすると

F#

1printfn "%d" ( 2 let rec sum x = 3 (if x > 0 then x + sum (x - 1) else 0) 4 in 5 sum 10 6 )

通常はsumの定義を外に出して、この様に書いた方が解りやすいと思います。

F#

1let rec sum x = if x > 0 then x + sum (x - 1) else 0 in 2 printfn "%d" (sum 10)

F#

1let rec sum x = 2 if x > 0 then 3 x + sum(x - 1) 4 else 5 0 6 7printfn "%d" (sum 10)

追記: ところで、この関数の実装は sum ではなく factorial では。

投稿2020/05/03 05:31

編集2020/05/25 11:13
teamikl

総合スコア8664

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問