トラック
/
Elm
Elm
/
演習
/
ピカピカ
ピカピカ

ピカピカ

学習演習

はじめに

文字列

Elmでは、文字と文字列がテキストを表すための基本になります。文字列は文字のリストと考えることができ、Listのほとんどの関数にはStringモジュールに対応するものがあります。

文字

Char型は、'a'のように一重引用符で囲んだ単一のUnicode文字を表します。 Charモジュールには、文字の性質を調べる述語関数(Char -> Bool)が用意されています。たとえばisUpper、isLower、isAlpha、isAlphaNumです。 また、このモジュールには、文字を変換する関数としてtoUpper、toLower、toLocaleUpper、toLocaleLowerが、数値のUnicode値(Int)との相互変換を行う関数としてtoCodeとfromCodeがあります。

文字列

String型は、効率的な文字列操作のための組み込みの表現で、任意のUnicode文字の並びを表すことができます。たとえば"これはElmの文字列です。"のように。 複数行の文字列は二重引用符3つで表し、エスケープされていない引用符や改行を含めることができます。

"""
    This is a multiline string.
All line-breaks and whitespace,
are preserved. 
"""

文字列の関数

Stringモジュールには、下の表にまとめたすべての関数が含まれています。 特によく使われる関数には、次のようなものがあります。

cons : Char -> String -> Stringは、文字列の先頭に文字を追加します。

cons 'T' "he truth is out there" 
    --> "The truth is out there"

(++): String -> String -> Stringは、2つの文字列を連結します。

"butter" ++ "fly" 
    --> "butterfly"

split : String -> String -> List Stringは、指定した区切り文字の位置で文字列を文字列のリストに分割します。

split ";" "cat;dog;cow" 
    --> ["cat", "dog", "cow"]

join : String -> List String -> Stringは、文字列のリストを指定した区切り文字で連結します。

join "a" ["H", "w", "ii", "n"] 
    --> "Hawaiian"

replace : String -> String -> String -> Stringは、指定した部分文字列のすべての出現箇所を置き換えます。

replace "Hello" "Goodbye cruel" "Hello world." 
    --> "Goodbye cruel world."

length : String -> Intは、文字列の文字数を返します。

length "Hello world." 
    --> 12

toInt : String -> Maybe Intは、文字列をJust Intに変換しようとし、形式が正しくない文字列にはNothingを返します。

toInt "-42" 
    --> Just -42

contains : String -> String -> Boolは、2番目の文字列に1番目の文字列が含まれているかどうかを調べます。

contains "the" "theory" 
    --> True

map : (Char -> Char) -> String -> Stringは、指定した関数を文字列内のすべてのCharに適用します。 渡す関数はCharからCharへの写像でなければならないことに注意してください。

map (\c -> if c == '/' then '.' else c) "a/b/c" 
    --> "a.b.c"

すべての文字列関数

操作 部分文字列 チェック 変換 高階関数
reverse slice length toInt map
repeat left isEmpty fromInt filter
replace right contains toFloat foldl
append dropLeft startsWith fromFloat foldr
concat dropRight indexes toList any
split fromList all
join fromChar
words
lines
cons
uncons

説明

この演習では、エンジニアが識別子の名前を整えるのを助けるユーティリティ関数の一部を実装します。

5つのタスクを通して、clean関数を少しずつ組み立てていきます。 有効な識別子は、0個以上の英字とアンダースコアで構成されます。

clean関数に空の文字列を渡した場合は、空の文字列が返されます。

1. スペースをアンダースコアに置き換える

スペースをアンダースコアに置き換えるclean1関数を実装します。先頭と末尾のスペースも対象です。

clean1 "my   Id"
    --> "my___Id"

2. 制御文字を大文字の文字列"[CTRL]"に置き換える

clean2を実装して、前の関数と同じ処理に加えて、一般的な制御文字(\n、\t、\r)を文字列"[CTRL]"に置き換えます。

clean2 "my\nId"
    --> "my[CTRL]Id",

3. ケバブケースをキャメルケースに変換する

clean3を実装して、前の関数と同じ処理に加えて、ケバブケースをキャメルケースに変換します。

clean3 "à-ḃç"
    --> "àḂç"

4. 数字を除く

clean4を実装して、前の関数と同じ処理に加えて、すべての数字を除きます。

clean4 "123"
    --> ""

5. ギリシャ文字の小文字を除く

最後に、cleanを実装して、前の関数と同じ処理に加えて、'α'から'ω'の範囲のギリシャ文字を除きます。

clean "My Οβιεγτ Finder"
    --> "My_Ο_Finder"
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Elm Exercism

ピカピカを始める準備はできましたか?

Exercismに登録すれば、28個のコンセプト110個の演習、そして本物の人間によるメンタリングとともに、Elmを学んでマスターできます。すべて無料です。