トラック
/
Elixir
Elixir
/
演習
/
言語リスト
言語リスト

言語リスト

学習演習

はじめに

配列

配列はElixirに組み込まれた基本型のひとつで、角括弧([])で表します。空の配列も作れますし、どんな型の要素でも好きなだけ入れることもできます。たとえば:

empty_list = []
one_item_list = [1]
two_item_list = [1, 2]
multiple_type_list = [1, :pi, 3.14, "four"]

Elixirは配列を連結リストとして実装しています。各ノードは、先頭の要素と、残りのすべての要素を含む別の配列という2つの値を保持します。配列の最初の要素を_先頭_、残りの要素の並びを_末尾_と呼びます。この表記はコードの中でも使えます:

# [1] represented in [head | tail] notation
[1 | []]

# [1, 2, 3] represented in [head | tail] notation
[1 | [2 | [3 | []]]]

_[head | tail]_という表記を使うと、配列の先頭に要素を追加できます:

# Suppose
list = [2, 1]

[3, 2, 1] == [3 | list]
# => true

配列を扱うための関数はKernelモジュールにもいくつかありますが、Listモジュールにはそれらがひととおり揃っています。

# Check if 1 is a member of the list
1 in [1, 2, 3, 4]
# => true

説明

この演習では、プログラミング言語の配列を操作するためのいくつかの関数を実装します。

1. 空の言語の配列を返す関数を定義する

引数を取らず、空の配列を返すnew/0関数を定義しましょう。

LanguageList.new()
# => []

2. 配列に言語を追加する関数を定義する

2つの引数(_言語の配列_と_言語_の文字列リテラル)を取るadd/2関数を定義しましょう。与えられた配列の先頭に新しい言語を追加した結果の配列を返すようにします。

language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Clojure")
# => ["Clojure"]
language_list = LanguageList.add(language_list, "Haskell")
# => ["Haskell", "Clojure"]

3. 配列から言語を削除する関数を定義する

1つの引数(言語の配列)を取るremove/1関数を定義しましょう。最初の要素を除いた配列を返すようにします。配列には常に少なくとも1つの要素があると仮定します。

language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Clojure")
# => ["Clojure"]
language_list = LanguageList.add(language_list, "Haskell")
# => ["Haskell", "Clojure"]
language_list = LanguageList.remove(language_list)
# => ["Clojure"]

4. 配列の最初の要素を返す関数を定義する

1つの引数(言語の配列)を取るfirst/1関数を定義しましょう。配列の最初の言語を返すようにします。配列には常に少なくとも1つの要素があると仮定します。

language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Elm")
# => ["Elm"]
language_list = LanguageList.add(language_list, "Prolog")
# => ["Prolog", "Elm"]
LanguageList.first(language_list)
# => "Prolog"

5. 配列に含まれる言語の数を返す関数を定義する

1つの引数(言語の配列)を取るcount/1関数を定義しましょう。配列に含まれる言語の数を返すようにします。

language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Elm")
# => ["Elm"]
language_list = LanguageList.add(language_list, "Prolog")
# => ["Prolog", "Elm"]
LanguageList.count(language_list)
# => 2

6. 配列に関数型言語が含まれているかを判定する関数を定義する

1つの引数(言語の配列)を取るfunctional_list?/1関数を定義しましょう。真偽値を返すようにします。_"Elixir"_が配列に含まれる言語の1つであればtrueを返すようにします。

language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Elixir")
# => ["Elixir"]
LanguageList.functional_list?(language_list)
# => true
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Elixir Exercism

言語リストを始める準備はできましたか?

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