Skip to content

Commit 20ce57f

Browse files
committed
Introduce point-free style and a little cryptic example
1 parent b521b0e commit 20ce57f

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

assets/18.md

+18-4
Original file line numberDiff line numberDiff line change
@@ -725,17 +725,31 @@ greetEach xs = map (\x -> ("Hello, " ++ x)) xs
725725
greetEach = map ("Hello, " ++)
726726
```
727727

728-
hoge
728+
以上のような、`greetEach`関数から引数`xs`を取り除いたり、`map`関数に渡す関数`(\x -> ("Hello, " ++ x))`から引数`x`を取り除いたりするように、引数に名前を付けずに関数を組み立てる手法を、「ポイントフリースタイル」と言います。
729+
730+
もう少し複雑な例を見てみましょう。先ほどの`greetEach`関数、リストに入った各文字列に挨拶をするのはいいのですが、ちょっと元気が足りませんね。挨拶だけでは寂しいので、末尾に「`!`」を付けてみましょう。ポイントフリースタイルを**使わずに**書いた場合、次のとおりです:
729731

730-
hoge: ポイントフリースタイルについてここで説明
732+
```haskell
733+
greetEach xs = map (\x -> ("Hello, " ++ x ++ "!")) xs
734+
```
731735

732-
に、末尾に「!」を加えたくなったとする。
736+
試しに実行してみると、確かに元気に挨拶していますね!
733737

734738
```haskell
735-
ghci> map (("Hello, " ++) . (++ "!")) ["Tom", "Bob", "Alice"]
739+
ghci> greetEach ["Tom", "Bob", "Alice"]
736740
["Hello, Tom!","Hello, Bob!","Hello, Alice!"]
737741
```
738742

743+
この関数をポイントフリースタイルで書いてみましょう(どうしてこうなるかは、自力で考えてみてください!)。
744+
745+
```haskell
746+
greetEach = map (("Hello, " ++) . (++ "!"))
747+
```
748+
749+
引数`xs``x`もなくなり、短くなりました!...が、`++) . (++`の辺り、ちょっと暗号っぽくもなってきてますね。
750+
751+
hoge
752+
739753
さらにさらに、どんどんポイントフリースタイルにすると、読みにくくなってしまう例が: [ポイントフリースタイルへの道 〜最大公約数編〜 - Qiita][1]
740754
これまでの課題で紹介していない機能も利用していますが参考までにどうぞ。
741755
大事なことは、[**短く書ける人を上級者と呼ぶな**][2]ということです。

0 commit comments

Comments
 (0)