comparison tex/agda.tex @ 7:acad18934981

add description of rbtree
author soto@cr.ie.u-ryukyu.ac.jp
date Mon, 14 Sep 2020 05:41:23 +0900
parents 4bf00f7ba825
children 27a6616b6683
comparison
equal deleted inserted replaced
6:4bf00f7ba825 7:acad18934981
7 7
8 \subsection{プログラムの読み方} 8 \subsection{プログラムの読み方}
9 以下は Agda プログラムの一例となる。 9 以下は Agda プログラムの一例となる。
10 本節では以下のコードを説明することにより、Agda プログラムについて理解を深めることにより、 10 本節では以下のコードを説明することにより、Agda プログラムについて理解を深めることにより、
11 後述する Agda コードの理解を容易にすることを目的としている。 11 後述する Agda コードの理解を容易にすることを目的としている。
12
13 基本事項として、ℕ というのは自然数 (Natulal Number) のことである。
14 また - (ハイフン) が2つ連続して並んでいる部分はコメントアウトであり、
15 ここでは関数を実行した際の例を記述している。
16 したがって、この関数は2つの自然数を受け取って足す関数であることが推測できる。
17
12 \lstinputlisting[label=plus, caption=plus] {src/agda/plus.agda} 18 \lstinputlisting[label=plus, caption=plus] {src/agda/plus.agda}
13 19
14 \begin{itemize} 20 この関数の定義部分の説明をする。コードの1行目に : (セミコロン)がある。
15 \item 基本事項 21 この : の前が関数名になり、その後ろがその関数の定義となる。
16 \begin{itemize} 22 : 以降の (x y : ℕ ) は関数は x, y の自然数2つを受けとるという意味になる。
17 \item 23 → 以降は関数が返す型を記述している。
18 ℕ というのは自然数 (Natulal Number) のことである。 24 まとめると、この関数 plus は、型が自然数である2つの変数が x, y を受け取り、
19 また、- (ハイフン) が2つ連続して並んでいる部分はコメントアウトであり、 25 自然数を返すという定義になる。
20 ここでは関数を実行した際の例を記述している。 26
21 したがって、この関数は2つの自然数を受け取って足す関数であることが推測できる。 27 実装部分の説明をする。
22 \end{itemize} 28 関数の定義をしたコードの直下で実装を行うのが常である。
23 \item 定義部分 29 関数名を記述した後に引数を記述して受け取り、= (イコール) 以降で
24 \begin{itemize} 30 引数に対応した実装をする。
25 \item 31
26 コードの1行目に : (セミコロン)がある。 32 今回の場合 plus x zero であれば +0 である為、そのまま x を返す。
27 この : の前が関数名になり、その後ろがその関数の定義となる。\\ 33 実装2行目の方で受け取った y の値を減らし、x の値を増やして再び plus の関数に
28 : の後ろの (x y : ℕ ) は関数は x, y の自然数2つを受けとる。 34 遷移している。
29 という意味になる。 35 受け取った y を +1 されていたとして y の値を減らしている。
30 → の後ろは関数が返す型を記述している。 36
31 まとめると、この関数 plus は、型が自然数である2つの変数が x, y を受け取り、 37 関数の実装全体をまとめると、x と y の値を足す為に y から x に数値を1つずつ渡す。
32 自然数を返すという定義になる。 38 y が 0 になった際に計算が終了となっている。
33 \end{itemize} 39 指折りでの足し算を実装していると捉えても良い
34 \item 実装部分
35 \begin{itemize}
36 \item
37 関数の定義をしたコードの直下で実装を行うのが常である。
38 関数名を記述した後に引数を記述して受け取り、= (イコール) の後ろで
39 引数に対応し実装を作を記述していく。
40 今回の場合では、 plus x zero であれば +0 である為、そのまま x を返す。
41 2行目の方では受け取った y の値を減らし、x の値を増やして再び plus の関数に
42 遷移している。
43 受け取った y は+1されていたことにすることでyの値を減らしている。
44 実装部分もまとめると、x と y の値を足す為に、y から x に数値を1つずつ渡す。
45 y が 0 になった際に計算が終了となっている。
46 指折りでの足し算を実装していると捉えても良い
47 \end{itemize}
48 \end{itemize}
49 40
50 \subsection{Data 型} 41 \subsection{Data 型}
51 Deta 型とは分岐のことである。 42 Deta 型とは分岐のことである。
52 そのため、それぞれの動作について実装する必要がある。 43 そのため、それぞれの動作について実装する必要がある。
53 例として既出で Data 型である ℕ の実装を見てみる。 44 例として既出で Data 型である ℕ の実装を見てみる。