回答編集履歴

1

コメント対応

2021/08/10 03:03

投稿

kakkun61
kakkun61

スコア285

test CHANGED
@@ -23,3 +23,53 @@
23
23
  7
24
24
 
25
25
  ```
26
+
27
+
28
+
29
+ ----
30
+
31
+
32
+
33
+ > 分からない点としましては、最後の
34
+
35
+ > ```haskell
36
+
37
+ > (\_ -> 7) (\f10z -> f10z)
38
+
39
+ > ```
40
+
41
+ > という式の部分で、これは `(\x -> 7) (\f10z -> f10z)` と書いても正しく実行されるんですが、この場合左のラムダ関数の `x` という引数に入るのが、右側のラムダ関数 `(\f10z -> f10z)` を実行した結果ですよね?じゃ右側のラムダ関数 `(\f10z -> f10z)` の `f10z` という引数には何が渡されるのかというと何も渡されていないので混乱してしまっております。。。
42
+
43
+
44
+
45
+ `x` は `\f10z -> f10z` という関数そのものになります。`x` が関数であることを確かめるために次のようなコードを考えてみましょう。
46
+
47
+
48
+
49
+ ```haskell
50
+
51
+ (\x -> x 7) (\y -> y + 1)
52
+
53
+ ```
54
+
55
+
56
+
57
+ どうでしょうか?これも簡約していくと次のようになります。
58
+
59
+
60
+
61
+ ```haskell
62
+
63
+ (\x -> x 7) (\y -> y + 1)
64
+
65
+ ≡〈関数適用(ただし x = \y -> y + 1)〉
66
+
67
+ (\y -> y + 1) 7
68
+
69
+ ≡〈関数適用(ただし y = 7)〉
70
+
71
+ 7 + 1
72
+
73
+ ≡ 8
74
+
75
+ ```