Mercurial > hg > Papers > 2015 > atton-midterm
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} |