Skip to content

Commit

Permalink
Begin to rewrite the example to describe point-free style
Browse files Browse the repository at this point in the history
  • Loading branch information
igrep committed Feb 11, 2024
1 parent 3b237a0 commit 4620201
Showing 1 changed file with 8 additions and 27 deletions.
35 changes: 8 additions & 27 deletions assets/18.md
Original file line number Diff line number Diff line change
Expand Up @@ -657,51 +657,32 @@ ghci> (4 -) 4

### やり過ぎ注意、あるいはどこまでやるか

復習を兼ねて、ここまでで紹介した種々のテクニックを活用して、次⬇️の関数をより簡潔に書き換えてみましょう。この課題の学習する内容と直接関係がない知識も混ざりますが、ついでに学ぶと思ってご容赦ください。
復習を兼ねて、ここまでで紹介した種々のテクニックを活用してみましょう。文字列を処理する関数をいくつか書いて、それを短くしては拡張し、短くしては拡張し...、というサイクルを繰り返します。この課題の学習する内容と直接関係がない知識も混ざりますが、ついでに学ぶと思ってご容赦ください。

```haskell
selectYes :: [String] -> [String]
selectYes strs = filter (\str -> map toUpper str == "YES") strs
```

この`selectYes`関数は、文字列のリストから`"yes"`という文字列を探して、`"yes"`のみが含まれるリストを返します。ただし、大文字と小文字の区別をしません。つまり、`"yes"`だけでなく`"Yes"`でも`"yEs"`等も含みます。これだけではあまり役に立たないですが、まぁ例と言うことで。もっと拡張したら役に立つシーンもあるかも知れませんし。

実際に書き換える前に、`selectYes`関数をGHCiに入力して、動作を確かめておきましょう:
まずは、`map`関数を使い、文字列のリストの各要素に「挨拶する」、すなわち`"Hello, "`という文字列を先頭に付け加える関数を書いてみましょう:

```haskell
ghci> -- 利用する toUpper 関数は Data.Char モジュールにあるので、importしておきます
ghci> import Data.Char

ghci> -- GHCi に入力する場合、:{ と :} で囲むのを忘れずに
ghci> :{
ghci| selectYes :: [String] -> [String]
ghci| selectYes strs = filter (\str -> map toUpper str == "YES") strs
ghci| :}

ghci> selectYes ["no", "yes", "yES", "iie", "YES"]
["yes","yES","YES"]
greetEach xs = map (\x -> ("Hello, " ++ x)) xs
```

hoge: `filter`より先に`map`を書き換えて、`filter`を書き換えるときに`filter`を紹介

hoge: ポイントフリースタイルについてここで説明
<!-- NOTE: この入門、`filter`について全く触れてないからここで触れようかと思ったけど、時間かかりそうだしこんなもんにしとくか... -->

このくらいなら序の口?

さっきの、

```
```haskell
ghci> map ("Hello, " ++) ["Tom", "Bob", "Alice"]
["Hello, Tom","Hello, Bob","Hello, Alice"]
```

に、末尾に「!」を加えたくなったとする。

```
```haskell
ghci> map (("Hello, " ++) . (++ "!")) ["Tom", "Bob", "Alice"]
["Hello, Tom!","Hello, Bob!","Hello, Alice!"]
```

hoge: ポイントフリースタイルについてここで説明

さらにさらに、どんどんポイントフリースタイルにすると、読みにくくなってしまう例が: [ポイントフリースタイルへの道 〜最大公約数編〜 - Qiita][3]
これまでの課題で紹介していない機能も利用していますが参考までにどうぞ。
大事なことは、[**短く書ける人を上級者と呼ぶな**][4]ということです。
Expand Down

0 comments on commit 4620201

Please sign in to comment.