今回は、結構盛り沢山です。scope)を学んでいきます(長くなったので、今回は高階関数までです)。Haskellをやる上で最重要項目と言ってもいいです。前回は下のsを\t(タブ)で分割するためにdivideAtTabという関数を作成しました。s)前回行うのを忘れていました(笑)が、divideAtTabをsに適用してみます。s)("今日","名詞,副詞可能,*,*,*,*,今日,キョウ,キョー")結果はタプルで得られています。"今日"と、"名詞,副詞可能,*,*,*,*,今日,キョウ,キョー"とで分かれています。前回の終わりでこの関数divideAtTabはダメだと述べました。ダメなのかを確認してみます。s以外には使えないということです。"今日はmap関数を勉強していきます。1上のsが"今日\t名詞,副詞可能,*,*,*,*,今日,キョウ,キョー"でした。s1に適用してみてください。s1)("は\t","詞,係助詞,*,*,*,*,は,ハ,ワ")はい、"\t"(タブ)で切れていません。タブより前は2文字とは限らないので、だめです。この辺り改善しておきます。ここで高階関数が出てきます。高階関数の意味は後で述べます。高階関数takeWhileとdropWhileまずは使ってみましょう。Data.ListのtakeWhileとdropWhileを使います。復習ですが、文字列(String)は[Char]として表されます。'能']Trueになっていると思います。上の'\t'で分割したいのでした。「Whileって、どういう間takeし続けるの?」というリアクションになります。いつまでtakeするんだというのが抜けています。例のごとくtakeWhileの型を見ましょう。Bool)になっています。これはaという型を受け取り、Boolを返す関数になっています。aは型ならなんでも良いよ、という意味です(補足ですが自分で関数定義する際には、aでなくてもbとかcとか書いてもいいです)。上の例だとCharを考えています。Bool)が「Whileって、どういう間takeし続けるの?」に相当します。'\t'より前を得たいので、「どういう間?」、というのは「'\t'でない間」と言えそうです。'\n'でない間というのは以下のとおりに書けます。/=を使えと言ってきます。'\t'はい、isNotTabの型を確認してください。Bool)みたいになっています。