annotate bachelor_middle_draft.tex @ 6:2a24f7479429 submit

Update to v2.3
author Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
date Wed, 29 Oct 2014 15:21:32 +0900
parents 156ae5d5750b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 \documentclass[twocolumn,twoside,9.5pt]{jarticle}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 \usepackage[dvips]{graphicx}
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
3 \usepackage{cprotect}
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 \usepackage{picins}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 \usepackage{fancyhdr}
6
2a24f7479429 Update to v2.3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
6 \usepackage{fancyvrb}
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 \usepackage{eclbkbox}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 \usepackage{url}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 %\pagestyle{fancy}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 \lhead{\parpic{\includegraphics[height=1zw,keepaspectratio,bb=0 0 251 246]{pic/emblem-bitmap.pdf}}琉球大学主催 工学部情報工学科 中間発表予稿}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 \rhead{}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 \cfoot{}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 \setlength{\topmargin}{-1in \addtolength{\topmargin}{15mm}}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 \setlength{\headheight}{0mm}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 \setlength{\headsep}{5mm}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 \setlength{\oddsidemargin}{-1in \addtolength{\oddsidemargin}{11mm}}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 \setlength{\evensidemargin}{-1in \addtolength{\evensidemargin}{21mm}}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 \setlength{\textwidth}{181mm}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 \setlength{\textheight}{261mm}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 \setlength{\footskip}{0mm}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 \pagestyle{empty}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 \begin{document}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 \title{Modify Program by Monad}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 \author{115763K 氏名 {比嘉}{健太} 指導教員 : 河野真治}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 \date{}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 \maketitle
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 \thispagestyle{fancy}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
31 % {{{ プログラムの変更を表すMonad
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
33 \section{プログラムの変更を表すMonad}
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
34 プログラムを変更するとプログラムの実行結果も変化する。
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
35 しかし、変更後のプログラムが正しい実行結果でない場合も存在する。
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
36 そこで、プログラムに対する変更をMonadとして記述する。
3
331d9984930f Fixes from hiyoko-san check
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
37 Monadとして変更を記述することで、プログラムの変更時にこのプログラムの変更が正しく完成に近づくような変更なのか評価する。
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
38 ひいては、プログラムを変更することの意味や性質などを解析する。
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 % }}}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
42 % {{{ 限定されたプログラムの変更を表す Delta Monad
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
44 \section{限定されたプログラムの変更を表す Delta Monad}
3
331d9984930f Fixes from hiyoko-san check
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
45 Monad を用いたプログラムの変更の例として、プログラミング言語HaskellにおけるMonadを利用する。
4
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
46 Haskell におけるMonadとはメタ計算を内包したデータ型である。
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
47 Monadであるデータ型は任意の型の値を内包することができ、内包した型に対する計算を行なった際にメタ計算も同時に行なう。
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
49 Haskell において限定されたプログラムの変更を表すことができる Delta Monad を定義した。
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
50 Delta Monad におけるプログラムの変更は、変更前と変更後の実行結果を両方持つことによって表現する。
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
51 また、実行結果に対する変更履歴を持ち、2つ変更履歴の比較によってプログラムがどのように変更したか判断する。
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
52
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
53 データ型Delta の定義を示す(図\ref{delta-monad-definition})。
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
55 % {{{ Definiton Delta
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
56
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
57 \begin{breakbox}
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
58 \verb/ data Delta a = Delta [String] a [String] a/
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
59 \caption{型変数を持つ型 Delta の定義(Haskell)}
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
60 \label{delta-monad-definition}
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
61 \end{breakbox}
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 % }}}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
65 データ型 Delta は任意の型aの変数を持つことができる。
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
66 型aの変数を2つと変数に対する実行履歴となる文字列のリストを2つ持つ。
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
67 このデータ型をMonadとして利用するが、あるデータ型をMonadとするためには関数 return と \verb/>>=/ を定義する必要がある(図\ref{monad-class})。
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
69 % {{{ Definiton Delta
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 \begin{breakbox}
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
72 \begin{verbatim}
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
73 return :: Monad m => a -> m a
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
74 (>>=) :: Monad m => m a -> (a -> m b) -> m b
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
75 \end{verbatim}
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
76 \caption{データ型をMonadとするために必要な関数}
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
77 \label{monad-class}
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 \end{breakbox}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 % }}}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
82 図\ref{monad-class} の定義は関数の型のみ記述している。
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
83 m は Monad であり、m a は任意の型 a を内包するMonadである。
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
84 return は任意の型aからm aの値を返す関数 return がある。
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
85 return は任意の型の値をMonadに内包するために利用する。
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
86 中置関数\verb/(>>=)/ はMonadの値 m a と、aを取って m b を返す関数を取り、m b の値を返す。
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
87 \verb/(>>=)/の定義がMonadに対するメタ計算の定義となる。
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
89 Delta におけるreturnと\verb/>>=/の定義を図\ref{monad-instance-delta}に示す。
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
91 % {{{ instance Monad Delta
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 \begin{breakbox}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 \begin{verbatim}
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
95 mu (Delta lx (Delta llx x _ _)
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
96 ly (Delta _ _ lly y)) =
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
97 Delta (lx ++ llx) x (ly ++ lly) y
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
99 instance Monad Delta where
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
100 return x = Delta [] x [] x
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 d >>= f = mu $ fmap f d
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 \end{verbatim}
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
103 \cprotect\caption{Delta に対する return と\verb/(>>=)/ の定義}
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
104 \label{monad-instance-delta}
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 \end{breakbox}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 % }}}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
109 return においては実行履歴が存在しない空の文字列を含んだMonadを返す。
5
156ae5d5750b Update to v2.2
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
110 型a の値xは2つに複製され、異なる実行結果を得るために利用する。
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
111 \verb/(>>=)/においては、異なる実行結果に対して対応する実行履歴を保存しながら関数を適用する。
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
112
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
113 これらの関数returnと\verb/>>=/は満たすべきMonad則が存在する。
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
114 型Deltaに対するこれらの関数がMonad則を満たしていることは定理証明支援系プログラミング言語Agda\cite{agda}によって証明した。
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 % }}}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
117
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
118 % {{{ Delta Monad におけるプログラムの変更例
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
119
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
120 \section{Delta Monad におけるプログラムの変更例}
4
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
121 変更例となるHaskellのプログラムを示す(図\ref{raw-program-before})。
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
122
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
123 % {{{ raw-program-before
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
124
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
125 \begin{breakbox}
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
126 {\scriptsize
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
127 \begin{verbatim}
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
128 generator :: Int -> [Int]
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
129 generator x = [1..x]
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
130
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
131 primeFilter :: [Int] -> [Int]
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
132 primeFilter xs = filter isPrime xs
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
133
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
134 count :: [Int] -> Int
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
135 count xs = length xs
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
136
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
137 primeCount :: Int -> Int
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
138 primeCount x = count . primeFilter . generator $ x
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
139 \end{verbatim}
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
140 }
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
141 \caption{変更前のHaskellプログラム}
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
142 \label{raw-program-before}
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
143 \end{breakbox}
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
144
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
145 % }}}
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
146
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
147
4
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
148 このプログラムは整数nを取り、1からnまでの整数の中から素数の個数を調べるプログラムである。
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
149 1からnまでの整数の個数を調べる primeCount 関数は3つの関数からなる。
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
150
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
151 \begin{itemize}
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
152 \item 1 から n までの整数を返す関数 generator
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
153 \item 整数のリストから素数である整数のみを残したリストを返す関数 primeFilter
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
154 \item リストの中に存在する要素の個数を返す関数 count
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
155 \end{itemize}
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
156
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
157 ここで、 primeFilter 関数を変更する。
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
158 素数である整数を残すのではなく、偶数を残すようにする。
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
159 Delta Monad を使わずに primeFilter 関数を変更すると図\ref{raw-program-after}のプログラムとなる。
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
160
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
161 % {{{ raw-program-after
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
162
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
163 \begin{breakbox}
6
2a24f7479429 Update to v2.3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
164 \begin{Verbatim}[commandchars=+\[\]]
4
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
165 primeFilter :: [Int] -> [Int]
6
2a24f7479429 Update to v2.3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
166 primeFilter xs = filter +underline[even] xs
2a24f7479429 Update to v2.3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
167 \end{Verbatim}
4
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
168 \caption{変更後の primeFilter 関数(変更点は下線)}
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
169 \label{raw-program-after}
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
170 \end{breakbox}
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
171
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
172 % }}}
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
173
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
174 プログラム(図\ref{raw-program-before})に対する図\ref{raw-program-after}の変更を Delta Monad で記述したものが図\ref{delta-program}のプログラムである。
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
175
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
176 % {{{ delta-program
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
177
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
178 \begin{breakbox}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
179 {\scriptsize
6
2a24f7479429 Update to v2.3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
180 \begin{Verbatim}[commandchars=+\[\]]
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
181 generator :: Int -> Delta [Int]
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 generator x = let intList = [1..x] in
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
183 returnD intList
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
184
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
185 primeFilter :: [Int] -> Delta [Int]
6
2a24f7479429 Update to v2.3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
186 primeFilter xs = let primeList = +underline[filter isPrime xs]
2a24f7479429 Update to v2.3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
187 modifiedList = +underline[filter even xs] in
2a24f7479429 Update to v2.3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
188 returnDD primeList modifiedList
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
189
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
190 count :: [Int] -> Delta Int
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
191 count xs = let primeCount = length xs in
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
192 returnD primeCount
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
193
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
194 primeCount :: Int -> Delta Int
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
195 primeCount x = generator x >>= primeFilter >>= count
6
2a24f7479429 Update to v2.3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
196 \end{Verbatim}
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
197 }
6
2a24f7479429 Update to v2.3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
198 \cprotect\caption{図\ref{raw-program-before}のプログラムに対する図\ref{raw-program-after}の変更を Delta Monad で記述した例(対応する変更点は下線)}
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
199 \label{delta-program}
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
200 \end{breakbox}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
201
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
202 % }}}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
203
4
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
204 Delta Monad を用いたプログラムでは全ての関数はDelta Monadを返す関数として記述される。
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
205 変更される primeFilter 関数は、素数によるフィルタと偶数によるフィルタの両方の結果を持ったDelta Monad を返すよう変更する。
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
206 図\ref{delta-program}のプログラムを実行した例が図\ref{delta-result}である。
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
207
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
208 % {{{ results
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
209
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
210 \begin{breakbox}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
211 {\small
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
212 \begin{verbatim}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
213 *Main> primeCount 10
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
214 Delta
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
215 ["[1,2,3,4,5,6,7,8,9,10]","[2,3,5,7]","4"] 4
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
216 ["[1,2,3,4,5,6,7,8,9,10]","[2,4,6,8,10]","5"] 5
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
217 \end{verbatim}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
218 }
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
219 \caption{Delta Monad を用いたプログラムの実行例}
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
220 \label{delta-result}
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
221 \end{breakbox}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
222
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
223 % }}}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
224
4
0805d4984b1f Update v2.1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
225 Delta Monad による実行結果は2つの実行結果が存在する。
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
226 変更前のプログラムの実行順序が上側の実行結果である。
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
227 \begin{itemize}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
228 \item 1 から 10 までのリストを作成し
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
229 \item 素数のみを残すために 2,3,5,7 が残り
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
230 \item その個数を数えるために4となる
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
231 \end{itemize}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
232 変更後のプログラムの実行順序が下側の実行結果である。
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
233 \begin{itemize}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
234 \item 1 から 10 までのリストを作成し
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
235 \item 偶数のみを残すために 2,4,6,8,10 が残り
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
236 \item その個数を数えるために5となる
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
237 \end{itemize}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
238
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
239 変更前の実行結果を保存しながら、プログラムが変更された後の新しい実行結果が得られた。
6
2a24f7479429 Update to v2.3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
240 この実行結果を比較することにより、プログラムがどのように変更されたか判断する。
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
241
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
242 今回は検証のために変更前と変更後の両方のプログラムを実行した。
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
243 しかし、必ず両方実行しなくてはならない訳では無い。
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
244 Haskell には遅延評価の機構が備わっており、値は必要とされるまで計算が実行されない。
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
245 そのため、変更後のプログラムの実行結果のみを表示する場合などは変更前の計算は行なわれない。
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
246 遅延評価とDelta Monadを組み合わせることで、必要の無い計算は増やさずに変更前のプログラムを保存できる。
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
247
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
248 % }}}
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
249
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
250 % {{{ まとめと課題
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
251
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
252 \section{まとめと課題}
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
253 Delta Monad を定義することにより、変更前のプログラムを保存しつつ変更後のプログラムとしても実行することが可能となった。
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
254 さらに、実行履歴が得られるためプログラムがどのように変化したかを確認することもできる。
1
9d656911de30 Comment from kono-lab-members
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
255
6
2a24f7479429 Update to v2.3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
256 今回定義したDelta Monad が保持できるプログラムの変更は2つまでである。
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
257 Delta Monad を拡張し、無限個の変更を扱えるようにすることでプログラムの変更をMonadのみで記述する。
5
156ae5d5750b Update to v2.2
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
258 さらに、Monad によってプログラムの変更を記述することで、Monadの理論的背景である圏論の視点からプログラムを変更することの意味論を探る。
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
259
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
260 % }}}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
261
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
262 \begin{thebibliography}{9}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
263
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
264 \bibitem{moggi} Eugenio Moggi, Notion of Computation and Monads(1991)
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
265 \bibitem{proofs-and-types} Jean-Yves Girard, Paulr Taylor, Yves Lafont, Proofs and Types(1990)
6
2a24f7479429 Update to v2.3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
266 \bibitem{category} Michael Barr and Charles Wells, Category Theory for Computing Science
2
514bb884084c Update v2.0
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
267 \bibitem{agda} The Agda Wiki - Agda \url{http://wiki.portal.chalmers.se/agda/pmwiki.php}
0
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
268
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
269 \end{thebibliography}
95a86a261203 Migrate from atton/texts/bachelor_middle_draft
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
270 \end{document}