Mercurial > hg > Members > atton > texts
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 |
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} |