# HG changeset patch # User Yasutaka Higa # Date 1414563692 -32400 # Node ID 2a24f74794296ac01e968044b6cb3d804928f7ee # Parent 156ae5d5750b9ea642a8c0bfe7fb5575e21f8435 Update to v2.3 diff -r 156ae5d5750b -r 2a24f7479429 bachelor_middle_draft.pdf Binary file bachelor_middle_draft.pdf has changed diff -r 156ae5d5750b -r 2a24f7479429 bachelor_middle_draft.tex --- a/bachelor_middle_draft.tex Wed Oct 29 15:08:35 2014 +0900 +++ b/bachelor_middle_draft.tex Wed Oct 29 15:21:32 2014 +0900 @@ -3,6 +3,7 @@ \usepackage{cprotect} \usepackage{picins} \usepackage{fancyhdr} +\usepackage{fancyvrb} \usepackage{eclbkbox} \usepackage{url} %\pagestyle{fancy} @@ -160,11 +161,10 @@ % {{{ raw-program-after \begin{breakbox} -{\tt +\begin{Verbatim}[commandchars=+\[\]] primeFilter :: [Int] -> [Int] - -primeFilter xs = filter \underline{even} xs -} +primeFilter xs = filter +underline[even] xs +\end{Verbatim} \caption{変更後の primeFilter 関数(変更点は下線)} \label{raw-program-after} \end{breakbox} @@ -177,15 +177,15 @@ \begin{breakbox} {\scriptsize -\begin{verbatim} +\begin{Verbatim}[commandchars=+\[\]] generator :: Int -> Delta [Int] generator x = let intList = [1..x] in returnD intList primeFilter :: [Int] -> Delta [Int] -primeFilter xs = let primeList = filter isPrime xs - refactorList = filter even xs in - returnDD primeList refactorList +primeFilter xs = let primeList = +underline[filter isPrime xs] + modifiedList = +underline[filter even xs] in + returnDD primeList modifiedList count :: [Int] -> Delta Int count xs = let primeCount = length xs in @@ -193,9 +193,9 @@ primeCount :: Int -> Delta Int primeCount x = generator x >>= primeFilter >>= count -\end{verbatim} +\end{Verbatim} } -\cprotect\caption{図\ref{raw-program-before}のプログラムに対する図\ref{raw-program-after}の変更を Delta Monad で記述した例} +\cprotect\caption{図\ref{raw-program-before}のプログラムに対する図\ref{raw-program-after}の変更を Delta Monad で記述した例(対応する変更点は下線)} \label{delta-program} \end{breakbox} @@ -237,7 +237,7 @@ \end{itemize} 変更前の実行結果を保存しながら、プログラムが変更された後の新しい実行結果が得られた。 -この実行結果を比較することにより、変更前のプログラムの実行結果が損なわれていないか検知する。 +この実行結果を比較することにより、プログラムがどのように変更されたか判断する。 今回は検証のために変更前と変更後の両方のプログラムを実行した。 しかし、必ず両方実行しなくてはならない訳では無い。 @@ -253,7 +253,7 @@ Delta Monad を定義することにより、変更前のプログラムを保存しつつ変更後のプログラムとしても実行することが可能となった。 さらに、実行履歴が得られるためプログラムがどのように変化したかを確認することもできる。 -今回定義したDelta Monad はプログラムの変更を保持できるのは1つのMonadにつき2つまでという制約がある。 +今回定義したDelta Monad が保持できるプログラムの変更は2つまでである。 Delta Monad を拡張し、無限個の変更を扱えるようにすることでプログラムの変更をMonadのみで記述する。 さらに、Monad によってプログラムの変更を記述することで、Monadの理論的背景である圏論の視点からプログラムを変更することの意味論を探る。 @@ -263,7 +263,7 @@ \bibitem{moggi} Eugenio Moggi, Notion of Computation and Monads(1991) \bibitem{proofs-and-types} Jean-Yves Girard, Paulr Taylor, Yves Lafont, Proofs and Types(1990) -\bibitem{category} Michael Barr and Chariles Wells, Category Theory for Computing Science +\bibitem{category} Michael Barr and Charles Wells, Category Theory for Computing Science \bibitem{agda} The Agda Wiki - Agda \url{http://wiki.portal.chalmers.se/agda/pmwiki.php} \end{thebibliography}