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

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

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

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

Q&A

解決済

1回答

2130閲覧

F#の文字の色の変更方法

YukoYasutake

総合スコア12

F#

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

0グッド

0クリップ

投稿2016/08/05 02:29

###前提・実現したいこと
F#初心者です
4つの数字を入力して平均より下の数字を赤く表示するものを作ろうとしています
C#と同じ感覚だとできなかったのでだれか助けて下さい・・・

###発生している問題・エラーメッセージ

このletに続くブロックが完了していません。式が必要です。

###該当のソースコード

open System let a=double(Console.ReadLine()) let b=double(Console.ReadLine()) let c=double(Console.ReadLine()) let d=double(Console.ReadLine()) let e=(a+b+c+d)/4.0 if(e>a) then let←ここ p =Console.ForegroundColor = ConsoleColor.Red System.Console.WriteLine(a) 以下同じ事の繰り返し

###試したこと
一応
val it : unit=()
を使ったりはしましたが上手くいきません
どうしたらいいでしょうか

###補足情報(言語/FW/ツール等のバージョンなど)
Visual Studio2015を使っています

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

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

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

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

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

guest

回答1

0

ベストアンサー

F#

1open System 2[<EntryPoint>] 3let main argv = 4 let a = double(Console.ReadLine()) 5 let b = double(Console.ReadLine()) 6 let c = double(Console.ReadLine()) 7 let d = double(Console.ReadLine()) 8 let e = (a+b+c+d)/4.0 9 10 if(e>a) then 11 Console.ForegroundColor <- ConsoleColor.Red //F#で再代入は"<-" 12 13 a |> printfn "%A" 14 15 Console.ReadLine() |> ignore //待機用 16 0

ただ、平均より下を赤くする(以上なら別の色)ということなら
これだと一度赤になったらなりっぱなしなので
工夫してください

こんな感じ?

F#

1open System 2[<EntryPoint>] 3let main argv = 4 5 6 let a = double(Console.ReadLine()) 7 let b = double(Console.ReadLine()) 8 let c = double(Console.ReadLine()) 9 let d = double(Console.ReadLine()) 10 let avg = (a+b+c+d)/4.0 11 12 let disp x = 13 let color x = 14 match avg < x with 15 | true -> ConsoleColor.White 16 | false -> ConsoleColor.Red 17 Console.ForegroundColor <- color x 18 x |> printfn "%A" 19 20 21 disp a 22 disp b 23 disp c 24 disp d 25 26 Console.ReadLine() |> ignore 27 0

F#

1open System 2[<EntryPoint>] 3let main argv = 4 5 let xs = [1..4] |> List.map( fun _ -> double(Console.ReadLine())) 6 7 let avg = xs |> List.average 8 9 let disp x = 10 let color x = 11 match avg < x with 12 | true -> ConsoleColor.White 13 | false -> ConsoleColor.Red 14 Console.ForegroundColor <- color x 15 x |> printfn "%A" 16 17 18 xs |> List.iter disp 19 20 Console.ReadLine() |> ignore 21 0

ちなみに質問のコードの何が(再代入を除いて)文法的にまずかったのかです。

まず、F#のifは式です。何かしらの値を返さなければいけません。
elseを省略するとunitを返すことが求められます。

次に

F#

1let f x = 2 let y = x + 1 // letが云々エラー

この書き方は、何を返すのか指定していないのでエラーになります。

F#

1let f x = 2 let y = x + 1 3 y

または

F#

1let f x = 2 x + 1

こう書く必要があります。

投稿2016/08/05 03:03

編集2016/08/05 07:38
ozwk

総合スコア13521

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問