teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

5

if式について

2016/08/05 07:38

投稿

ozwk
ozwk

スコア13553

answer CHANGED
@@ -74,4 +74,30 @@
74
74
 
75
75
  Console.ReadLine() |> ignore
76
76
  0
77
- ```
77
+ ```
78
+
79
+ ---
80
+
81
+ ちなみに質問のコードの何が(再代入を除いて)文法的にまずかったのかです。
82
+
83
+ まず、F#のifは式です。何かしらの値を返さなければいけません。
84
+ elseを省略するとunitを返すことが求められます。
85
+
86
+ 次に
87
+ ```F#
88
+ let f x =
89
+ let y = x + 1 // letが云々エラー
90
+ ```
91
+ この書き方は、何を返すのか指定していないのでエラーになります。
92
+
93
+ ```F#
94
+ let f x =
95
+ let y = x + 1
96
+ y
97
+ ```
98
+ または
99
+ ```F#
100
+ let f x =
101
+ x + 1
102
+ ```
103
+ こう書く必要があります。

4

コード修正

2016/08/05 07:38

投稿

ozwk
ozwk

スコア13553

answer CHANGED
@@ -36,7 +36,7 @@
36
36
 
37
37
  let disp x =
38
38
  let color x =
39
- match avg > x with
39
+ match avg < x with
40
40
  | true -> ConsoleColor.White
41
41
  | false -> ConsoleColor.Red
42
42
  Console.ForegroundColor <- color x
@@ -63,7 +63,7 @@
63
63
 
64
64
  let disp x =
65
65
  let color x =
66
- match avg > x with
66
+ match avg < x with
67
67
  | true -> ConsoleColor.White
68
68
  | false -> ConsoleColor.Red
69
69
  Console.ForegroundColor <- color x

3

さらにコード追加

2016/08/05 03:23

投稿

ozwk
ozwk

スコア13553

answer CHANGED
@@ -50,4 +50,28 @@
50
50
 
51
51
  Console.ReadLine() |> ignore
52
52
  0
53
+ ```
54
+
55
+ ```F#
56
+ open System
57
+ [<EntryPoint>]
58
+ let main argv =
59
+
60
+ let xs = [1..4] |> List.map( fun _ -> double(Console.ReadLine()))
61
+
62
+ let avg = xs |> List.average
63
+
64
+ let disp x =
65
+ let color x =
66
+ match avg > x with
67
+ | true -> ConsoleColor.White
68
+ | false -> ConsoleColor.Red
69
+ Console.ForegroundColor <- color x
70
+ x |> printfn "%A"
71
+
72
+
73
+ xs |> List.iter disp
74
+
75
+ Console.ReadLine() |> ignore
76
+ 0
53
77
  ```

2

コード追加

2016/08/05 03:17

投稿

ozwk
ozwk

スコア13553

answer CHANGED
@@ -19,4 +19,35 @@
19
19
 
20
20
  ただ、平均より下を赤くする(以上なら別の色)ということなら
21
21
  これだと一度赤になったらなりっぱなしなので
22
- 工夫してください
22
+ 工夫してください
23
+
24
+ こんな感じ?
25
+ ```F#
26
+ open System
27
+ [<EntryPoint>]
28
+ let main argv =
29
+
30
+
31
+ let a = double(Console.ReadLine())
32
+ let b = double(Console.ReadLine())
33
+ let c = double(Console.ReadLine())
34
+ let d = double(Console.ReadLine())
35
+ let avg = (a+b+c+d)/4.0
36
+
37
+ let disp x =
38
+ let color x =
39
+ match avg > x with
40
+ | true -> ConsoleColor.White
41
+ | false -> ConsoleColor.Red
42
+ Console.ForegroundColor <- color x
43
+ x |> printfn "%A"
44
+
45
+
46
+ disp a
47
+ disp b
48
+ disp c
49
+ disp d
50
+
51
+ Console.ReadLine() |> ignore
52
+ 0
53
+ ```

1

修正

2016/08/05 03:12

投稿

ozwk
ozwk

スコア13553

answer CHANGED
@@ -17,6 +17,6 @@
17
17
  0
18
18
  ```
19
19
 
20
- ただ、平均より下を赤くする(以上なら)ということなら
20
+ ただ、平均より下を赤くする(以上なら別の色)ということなら
21
21
  これだと一度赤になったらなりっぱなしなので
22
22
  工夫してください