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
または
こう書く必要があります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。