comparison 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
comparison
equal deleted inserted replaced
5:156ae5d5750b 6:2a24f7479429
1 \documentclass[twocolumn,twoside,9.5pt]{jarticle} 1 \documentclass[twocolumn,twoside,9.5pt]{jarticle}
2 \usepackage[dvips]{graphicx} 2 \usepackage[dvips]{graphicx}
3 \usepackage{cprotect} 3 \usepackage{cprotect}
4 \usepackage{picins} 4 \usepackage{picins}
5 \usepackage{fancyhdr} 5 \usepackage{fancyhdr}
6 \usepackage{fancyvrb}
6 \usepackage{eclbkbox} 7 \usepackage{eclbkbox}
7 \usepackage{url} 8 \usepackage{url}
8 %\pagestyle{fancy} 9 %\pagestyle{fancy}
9 \lhead{\parpic{\includegraphics[height=1zw,keepaspectratio,bb=0 0 251 246]{pic/emblem-bitmap.pdf}}琉球大学主催 工学部情報工学科 中間発表予稿} 10 \lhead{\parpic{\includegraphics[height=1zw,keepaspectratio,bb=0 0 251 246]{pic/emblem-bitmap.pdf}}琉球大学主催 工学部情報工学科 中間発表予稿}
10 \rhead{} 11 \rhead{}
158 Delta Monad を使わずに primeFilter 関数を変更すると図\ref{raw-program-after}のプログラムとなる。 159 Delta Monad を使わずに primeFilter 関数を変更すると図\ref{raw-program-after}のプログラムとなる。
159 160
160 % {{{ raw-program-after 161 % {{{ raw-program-after
161 162
162 \begin{breakbox} 163 \begin{breakbox}
163 {\tt 164 \begin{Verbatim}[commandchars=+\[\]]
164 primeFilter :: [Int] -> [Int] 165 primeFilter :: [Int] -> [Int]
165 166 primeFilter xs = filter +underline[even] xs
166 primeFilter xs = filter \underline{even} xs 167 \end{Verbatim}
167 }
168 \caption{変更後の primeFilter 関数(変更点は下線)} 168 \caption{変更後の primeFilter 関数(変更点は下線)}
169 \label{raw-program-after} 169 \label{raw-program-after}
170 \end{breakbox} 170 \end{breakbox}
171 171
172 % }}} 172 % }}}
175 175
176 % {{{ delta-program 176 % {{{ delta-program
177 177
178 \begin{breakbox} 178 \begin{breakbox}
179 {\scriptsize 179 {\scriptsize
180 \begin{verbatim} 180 \begin{Verbatim}[commandchars=+\[\]]
181 generator :: Int -> Delta [Int] 181 generator :: Int -> Delta [Int]
182 generator x = let intList = [1..x] in 182 generator x = let intList = [1..x] in
183 returnD intList 183 returnD intList
184 184
185 primeFilter :: [Int] -> Delta [Int] 185 primeFilter :: [Int] -> Delta [Int]
186 primeFilter xs = let primeList = filter isPrime xs 186 primeFilter xs = let primeList = +underline[filter isPrime xs]
187 refactorList = filter even xs in 187 modifiedList = +underline[filter even xs] in
188 returnDD primeList refactorList 188 returnDD primeList modifiedList
189 189
190 count :: [Int] -> Delta Int 190 count :: [Int] -> Delta Int
191 count xs = let primeCount = length xs in 191 count xs = let primeCount = length xs in
192 returnD primeCount 192 returnD primeCount
193 193
194 primeCount :: Int -> Delta Int 194 primeCount :: Int -> Delta Int
195 primeCount x = generator x >>= primeFilter >>= count 195 primeCount x = generator x >>= primeFilter >>= count
196 \end{verbatim} 196 \end{Verbatim}
197 } 197 }
198 \cprotect\caption{図\ref{raw-program-before}のプログラムに対する図\ref{raw-program-after}の変更を Delta Monad で記述した例} 198 \cprotect\caption{図\ref{raw-program-before}のプログラムに対する図\ref{raw-program-after}の変更を Delta Monad で記述した例(対応する変更点は下線)}
199 \label{delta-program} 199 \label{delta-program}
200 \end{breakbox} 200 \end{breakbox}
201 201
202 % }}} 202 % }}}
203 203
235 \item 偶数のみを残すために 2,4,6,8,10 が残り 235 \item 偶数のみを残すために 2,4,6,8,10 が残り
236 \item その個数を数えるために5となる 236 \item その個数を数えるために5となる
237 \end{itemize} 237 \end{itemize}
238 238
239 変更前の実行結果を保存しながら、プログラムが変更された後の新しい実行結果が得られた。 239 変更前の実行結果を保存しながら、プログラムが変更された後の新しい実行結果が得られた。
240 この実行結果を比較することにより、変更前のプログラムの実行結果が損なわれていないか検知する。 240 この実行結果を比較することにより、プログラムがどのように変更されたか判断する。
241 241
242 今回は検証のために変更前と変更後の両方のプログラムを実行した。 242 今回は検証のために変更前と変更後の両方のプログラムを実行した。
243 しかし、必ず両方実行しなくてはならない訳では無い。 243 しかし、必ず両方実行しなくてはならない訳では無い。
244 Haskell には遅延評価の機構が備わっており、値は必要とされるまで計算が実行されない。 244 Haskell には遅延評価の機構が備わっており、値は必要とされるまで計算が実行されない。
245 そのため、変更後のプログラムの実行結果のみを表示する場合などは変更前の計算は行なわれない。 245 そのため、変更後のプログラムの実行結果のみを表示する場合などは変更前の計算は行なわれない。
251 251
252 \section{まとめと課題} 252 \section{まとめと課題}
253 Delta Monad を定義することにより、変更前のプログラムを保存しつつ変更後のプログラムとしても実行することが可能となった。 253 Delta Monad を定義することにより、変更前のプログラムを保存しつつ変更後のプログラムとしても実行することが可能となった。
254 さらに、実行履歴が得られるためプログラムがどのように変化したかを確認することもできる。 254 さらに、実行履歴が得られるためプログラムがどのように変化したかを確認することもできる。
255 255
256 今回定義したDelta Monad はプログラムの変更を保持できるのは1つのMonadにつき2つまでという制約がある。 256 今回定義したDelta Monad が保持できるプログラムの変更は2つまでである。
257 Delta Monad を拡張し、無限個の変更を扱えるようにすることでプログラムの変更をMonadのみで記述する。 257 Delta Monad を拡張し、無限個の変更を扱えるようにすることでプログラムの変更をMonadのみで記述する。
258 さらに、Monad によってプログラムの変更を記述することで、Monadの理論的背景である圏論の視点からプログラムを変更することの意味論を探る。 258 さらに、Monad によってプログラムの変更を記述することで、Monadの理論的背景である圏論の視点からプログラムを変更することの意味論を探る。
259 259
260 % }}} 260 % }}}
261 261
262 \begin{thebibliography}{9} 262 \begin{thebibliography}{9}
263 263
264 \bibitem{moggi} Eugenio Moggi, Notion of Computation and Monads(1991) 264 \bibitem{moggi} Eugenio Moggi, Notion of Computation and Monads(1991)
265 \bibitem{proofs-and-types} Jean-Yves Girard, Paulr Taylor, Yves Lafont, Proofs and Types(1990) 265 \bibitem{proofs-and-types} Jean-Yves Girard, Paulr Taylor, Yves Lafont, Proofs and Types(1990)
266 \bibitem{category} Michael Barr and Chariles Wells, Category Theory for Computing Science 266 \bibitem{category} Michael Barr and Charles Wells, Category Theory for Computing Science
267 \bibitem{agda} The Agda Wiki - Agda \url{http://wiki.portal.chalmers.se/agda/pmwiki.php} 267 \bibitem{agda} The Agda Wiki - Agda \url{http://wiki.portal.chalmers.se/agda/pmwiki.php}
268 268
269 \end{thebibliography} 269 \end{thebibliography}
270 \end{document} 270 \end{document}