annotate bachelor_middle_draft/bachelor_middle_draft.tex @ 9:46cf7da74731

Update bachelor middle draft
author Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
date Sun, 26 Oct 2014 23:38:29 +0900
parents ffbe1bfc412c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 \documentclass[twocolumn,twoside,9.5pt]{jarticle}
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 \usepackage[dvips]{graphicx}
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 \usepackage{picins}
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 \usepackage{fancyhdr}
7
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
5 \usepackage{eclbkbox}
8
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
6 \usepackage{url}
5
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 %\pagestyle{fancy}
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 \lhead{\parpic{\includegraphics[height=1zw,keepaspectratio,bb=0 0 251 246]{pic/emblem-bitmap.pdf}}琉球大学主催 工学部情報工学科 中間発表予稿}
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 \rhead{}
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 \cfoot{}
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 \setlength{\topmargin}{-1in \addtolength{\topmargin}{15mm}}
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 \setlength{\headheight}{0mm}
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 \setlength{\headsep}{5mm}
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 \setlength{\oddsidemargin}{-1in \addtolength{\oddsidemargin}{11mm}}
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 \setlength{\evensidemargin}{-1in \addtolength{\evensidemargin}{21mm}}
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 \setlength{\textwidth}{181mm}
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 \setlength{\textheight}{261mm}
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 \setlength{\footskip}{0mm}
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 \pagestyle{empty}
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 \begin{document}
6
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
23 \title{Modify Program by Monad}
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
24 \author{115763K 氏名 {比嘉}{健太} 指導教員 : 河野真治}
5
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 \date{}
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 \maketitle
6
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
27 \thispagestyle{fancy}
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
28
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
29 % {{{ 研究目的
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
30
9
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
31 \section{研究目的と提案手法}
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
32 プログラムを変更するとプログラムの実行結果も変化する。
6
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
33 その際、変更前のプログラムでは正しく実行できていた内容が変更によって損なわれる場合がある。
9
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
34 プログラムの変更時に正しい実行結果が損なわれていないか自動で検知することを目的とする。
6
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
35
9
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
36 本研究では、自動で実行結果の変更を検知するために、プログラムの変更を Monad を利用して行なう。
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
37 Monad を利用したプログラム変更の際、変更前のプログラムを保存しながら変更する。
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
38 変更前のプログラムは保存されているので変更後も実行することができる。
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
39 両方の実行結果を比較することにより実行結果が損なわれていないか検知する。
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
40
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
41 また、プログラムの変更を Monad によって定義することによって、プログラムを変更することの意味や性質などを解析したい。
6
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
42
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
43 % }}}
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
44
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
45 % {{{ Monad
5
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46
9
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
47 \section{Haskell における Monad}
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
48 Monad とはプログラムの型に対するメタ計算に対応するもの\cite{moggi}である。
6
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
49
9
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
50 プログラムのデータは型に所属しており、関数は型に所属する値を受けとって値を返すものとして考える。
6
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
51 その際、任意の型Aを内包する型Tを定義することができる。
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
52 型Aを内包した型Tを T A と記述する。
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
53
9
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
54 ここで、型 T A の値と型Aから型T Bに変換する関数fをとり、型 T B の値を返す関数joinを定義することができる。
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
55 関数join では関数f で行なわれる計算と join で行なわれる計算がある。
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
56 計算の区別のために後者のことをメタ計算と呼ぶ。
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
57 メタ計算は関数fの内容に関わらず、型Tの定義により決定する。
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
58 このことにより、型Tに対するjoinを定義することで型Tに対するメタ計算を定義することが可能となる。
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
59 型T Aの値に対し、任意の関数を適用する際にjoinを用いることで、関数適用時に型Tのメタ計算を毎回行なうことができる。
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
60 このように、型Tに対してメタ計算を対応させたものがMonadである。
6
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
61
9
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
62 型Aの値を型T Aの値に変更する関数と関数joinはMonad則\cite{monad-laws}(図\ref{haskell-monad-law})を満たす必要がある。
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
63 プログラミング言語 Haskell においては型Aの値を型T Aの値に変更する関数名は return であり、joinは中置関数 \verb/>>=/ である。
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
64 これらの関数2つがMonad則を満たす時、メタ計算と計算が正しく分離して行なれることが保証される。
5
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65
6
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
66 % }}}
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
67
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
68 % {{{ Monad の定義
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
69
7
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
70 \section{プログラムの変更を表現するMonad}
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
71 プログラムの変更をMonadで表現するために、まず型変数を持つ型 Diff を定義した(図\ref{diff-monad-definition})。
6
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
72
8
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
73 % {{{ Definiton Diff
7
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
74
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
75 \begin{breakbox}
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
76 \verb/ data Diff a = Diff [String] a [String] a/
9
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
77 \caption{型変数を持つ型 Diff の定義(Haskell)}
7
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
78 \label{diff-monad-definition}
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
79 \end{breakbox}
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
80
8
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
81 % }}}
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
82
9
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
83 型変数aを持つデータ型 Diff は、データコンストラクタ Diff に対して型aを持つ変数と文字列のリストを2セット渡すことで構成される。
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
84 このデータコンストラクタ Diff が型Aの変数を型 Diff A に変換するTに相当している。
8
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
85 変数を2つ持つことができるため、片方を変更前のプログラムの計算用に、片方を変更後のプログラムの計算用に利用する。
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
86 文字列のリストは変更前のプログラムが正しく保存されているか確認するために利用するものである。
9
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
87 このリストはメタ計算にのみ利用される。
8
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
88
9
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
89 次にDiffをMonadとして定義する。
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
90 HaskellではMonadは型に対する型クラスとして表現される。
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
91 型クラスとは特定の型Aが特定の型クラスXに属するために必要な関数群である。
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
92 その関数群が定義された型Aを型クラスXのインスタンスであると呼ぶ。
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
93 ある型を型クラスMonadのインスタンスにする際には関数 return と \verb/>>=/ を定義する必要がある。
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
94
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
95 型Diff に対して関数 return と \verb/>>=/ を定義する(図\ref{diff-monad-instance-definition})。
8
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
96 % {{{ instance Monad Diff
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
97
7
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
98 \begin{breakbox}
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
99 \begin{verbatim}
8
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
100 mu (Diff lx (Diff llx x _ _)
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
101 ly (Diff _ _ lly y)) =
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
102 Diff (lx ++ llx) x (ly ++ lly) y
7
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
103
8
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
104 instance Monad Diff where
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
105 return x = Diff [] x [] x
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
106 d >>= f = mu $ fmap f d
7
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
107 \end{verbatim}
9
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
108 \caption{Diff を Monad のインスタンスとして定義する(Haskell)}
7
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
109 \label{diff-monad-instance-definition}
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
110 \end{breakbox}
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
111
8
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
112 % }}}
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
113
9
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
114 return はデータコンストラクタDiffによって型Aを型Diff Aへと変換する関数である。
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
115 \verb/>>=/ では、メタ計算として型Diffが持っている2つ変数に対する計算を行なう。
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
116 片方の変数はプログラム変更前の計算を行ない、もう片方は変更後の計算を行なうようにする。
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
117 変更前の計算も行なうことで、変更前のプログラムの保存とする。
8
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
118
9
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
119 また、型Diffが Monad則(図\ref{haskell-monad-law})を満たしていることは定理証明支援系プログラミング言語Agdaによって証明済みである。
8
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
120
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
121 % {{{ Monad-laws
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
122
7
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
123 \begin{breakbox}
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
124 \begin{verbatim}
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
125 return a >>= k = k a
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
126 m >>= return = m
8
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
127 m >>= (\x -> k x >>= h) = (m >>= k) >>= h
7
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
128 \end{verbatim}
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
129 \caption{Haskell における Monad則}
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
130 \label{haskell-monad-law}
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
131 \end{breakbox}
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
132
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
133 % }}}
5
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
134
8
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
135 % }}}
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
136
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
137 \section{Diff Monadを用いたプログラムの実行}
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
138 Diff Monad を用いたHaskellのプログラムを示す(図\ref{diff-program})。
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
139
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
140 % {{{ diff.hs
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
141
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
142 \begin{breakbox}
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
143 {\scriptsize
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
144 \begin{verbatim}
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
145 generator :: Int -> Diff [Int]
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
146 generator x = let intList = [1..x] in
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
147 returnD intList
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
148
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
149 primeFilter :: [Int] -> Diff [Int]
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
150 primeFilter xs = let primeList = filter isPrime xs
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
151 refactorList = filter even xs in
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
152 returnDD primeList refactorList
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
153
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
154 count :: [Int] -> Diff Int
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
155 count xs = let primeCount = length xs in
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
156 returnD primeCount
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
157
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
158 primeCount :: Int -> Diff Int
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
159 primeCount x = generator x >>= primeFilter >>= count
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
160 \end{verbatim}
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
161 }
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
162 \caption{Diff Monadを用いたプログラムの例}
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
163 \label{diff-program}
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
164 \end{breakbox}
5
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
165
6
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
166 % }}}
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
167
8
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
168 このプログラムは整数nを取り、1からnまでの整数の中から素数の個数を調べるプログラムである。
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
169 1からnまでの整数の個数を調べるprimeCount 関数は3つの関数からなる
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
170
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
171 \begin{itemize}
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
172 \item 1 から n までの整数を返す関数 generator
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
173 \item 整数のリストから素数であるもののみを残したリストを返す関数 primeFilter
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
174 \item リストの中に存在する要素の個数を返す関数 count
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
175 \end{itemize}
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
176
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
177 このプログラムの primeFilter 関数が返す Diff Monad を変更する。
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
178 本来ならば素数である整数のみを返す計算だったが、変更により偶数である整数のみを返すようにした。
9
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
179 図\ref{diff-program}のプログラムを実行した例が図\ref{diff-result}である。
8
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
180
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
181 % {{{ results
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
182
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
183 \begin{breakbox}
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
184 {\small
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
185 \begin{verbatim}
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
186 *Main> primeCount 10
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
187 Diff ["[1,2,3,4,5,6,7,8,9,10]","[2,3,5,7]","4"] 4
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
188 ["[1,2,3,4,5,6,7,8,9,10]","[2,4,6,8,10]","5"] 5
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
189 \end{verbatim}
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
190 }
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
191 \caption{Diff Monad を用いたプログラムの実行例}
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
192 \label{diff-result}
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
193 \end{breakbox}
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
194
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
195 % }}}
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
196
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
197 変更前のプログラムの実行順序が上側の実行結果である。
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
198 \begin{itemize}
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
199 \item 1 から 10 までのリストを作成し
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
200 \item 素数のみを残すために 2,3,5,7 が残り
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
201 \item その個数を数えるために4となる
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
202 \end{itemize}
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
203 変更後のプログラムの実行順序が下側の実行結果である。
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
204 \begin{itemize}
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
205 \item 1 から 10 までのリストを作成し
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
206 \item 偶数のみを残すために 2,4,6,8,10 が残り
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
207 \item その個数を数えるために5となる
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
208 \end{itemize}
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
209
9
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
210 変更前の実行結果を保存しながら、プログラムが変更された後の新しい実行結果が得られた。
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
211 この実行結果を比較することにより、変更前のプログラムの実行結果が損なわれていないか検知する。
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
212
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
213 今回は検証のために変更前と変更後の両方のプログラムを実行した。
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
214 しかし、必ず両方実行しなくてはならない訳では無い。
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
215 Haskell には遅延評価の機構が備わっており、値は必要とされるまで計算が実行されない。
46cf7da74731 Update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
216 そのため、変更後のプログラムの実行結果のみを表示する場合などは変更前の計算は行なわれない。
8
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
217 遅延評価とDiff Monadを組み合わせることで、必要の無い計算は増やさずに変更前のプログラムを保存できる。
6
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
218
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
219
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
220 % {{{ まとめと課題
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
221
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
222 \section{まとめと課題}
8
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
223 Diff Monad を定義することにより、変更前のプログラムを保存しつつ変更後のプログラムとして実行することが可能となった。
6
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
224
8
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
225 今後の課題としては大きく2つある。
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
226 変更の個数の拡張と Monad によってプログラムを変更することの意味を調べることである。
6
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
227 現状の Diff Monad はプログラムの変更を1つまでしか持つことができない。
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
228 変更を無限回行なえるDiffを定義することで、プログラムに対する変更をMonadによる変更のみで表したい。
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
229
8
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
230 また、プログラムに対する変更がMonadによって表される場合、圏論の視点からどのような意味が捉えられるか調査したい。
7
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
231 Monadは圏論から導入された概念であり、プログラム側のMonadと圏論側のMonadは対応している。
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
232 Diff Monad を圏論の観点で捉えることにより、Diff Monadの性質などを圏論側から導出できないかといった狙いがある。
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
233
de0aa29cc3d5 update bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
234 ひいては、プログラムを作ることや変更することは理論的にどのような意味を持つのかを探っていきたい。
6
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
235
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
236 % }}}
5
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
237
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
238 \begin{thebibliography}{9}
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
239
8
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
240 \bibitem{moggi} Eugenio Moggi, Notion of Computation and Monads (1991)
ffbe1bfc412c wrote bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
241 \bibitem{monad-laws} Monad - HaskellWiki \url{http://www.haskell.org/haskellwiki/Monad}
5
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
242
767917363b6f Add template to draft for bachelor middle
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
243 \end{thebibliography}
6
5cef251269ca Wrote some parts to bachelor middle draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
244 \end{document}