Mercurial > hg > Papers > 2014 > toma-master
diff paper/chapter3.tex @ 65:d15c924e9089
fix
author | Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 12 Feb 2014 21:08:01 +0900 |
parents | 13535fc08357 |
children |
line wrap: on
line diff
--- a/paper/chapter3.tex Wed Feb 12 20:00:15 2014 +0900 +++ b/paper/chapter3.tex Wed Feb 12 21:08:01 2014 +0900 @@ -17,7 +17,6 @@ \subsubsection{Jungle が持つデータ型} 非破壊的木構造データベース Jungle が持つのデータ型を表\ref{tab:components}に表す. - \begin{table}[htbp] \begin{center} \begin{tabular}{|c|c|c|} \hline @@ -31,6 +30,8 @@ \caption{Jungle が持つデータ型} \end{table} +TVar というのは, Transactional variablesの略で, STM で管理する変数に対して利用する. + 木構造の集まりを表現する Jungle, 単体の木構造を表現する Tree がある. Node は子と属性を任意の数持てる. データ型として定義することで, 内部の型の整合性が保たれる. @@ -94,7 +95,6 @@ 木と木の名前の Map は Haskell のソフトウェア・トランザクショナル・メモリ (STM) を利用して状態を持たせ, スレッド間で共有できるようにしてある. これは, 各スレッドから木構造を新たに作成できるようにするためである. -Jungle のデータ構造の Map の前に付いている TVar というのは, Transactional variablesの略で, STM で管理する変数に対して利用する. \subsubsection{Jungle と木の作成} Jungle は, 複数の非破壊的木構造を持つため, Map で木を管理している(図\ref{fig:jungle}). @@ -124,16 +124,6 @@ createJungleは, 新たにSTMの変数を作成する newTVar を実行する. newTVar などの STM の操作は STM モナド内で行う. 最後にatomicallyを行うことで, do 構文内がトランザクションとして実行される. -STMの関数が持つ型をソースコード\ref{src:stm}に示す. - -\newpage -\begin{lstlisting}[label=src:stm, caption=STMの関数] -newTVar :: a -> STM (TVar a) -readTVar :: TVar a -> STM a -writeTVar :: TVar a -> a -> STM () - -atomically :: STM a -> IO a -\end{lstlisting} ソースコード\ref{src:createJungle}の atomically の隣にある \$ は関数適用演算子である. \$ 関数は最も低い優先順位を持っており, 右結合である. @@ -388,9 +378,9 @@ \subsubsection{木の参照} 木の参照にも参照対象となる木構造の Node を用いる. -参照関数の定義をソースコード\ref{src:reffunc}に示す. +木構造の参照関数の定義をソースコード\ref{src:reffunc}に示す. -\begin{lstlisting}[label=src:reffunc, caption=参照関数] +\begin{lstlisting}[label=src:reffunc, caption=木構造の参照関数] getNode :: Node -> Path -> Node getNode node [] = node getNode node (x:xs) = getNode child xs @@ -436,12 +426,12 @@ pos = size map \end{lstlisting} -参照関数の基本的な流れは, getNode関数を使って参照したいPathのノードを取ってくることである. +木構造の参照関数の基本的な流れは, getNode関数を使って参照したいPathのノードを取ってくることである. そのノードにはwhereキーワードを利用して, targetという名前をつけている. targetに対して, 子のMapや属性のMapを取得した後, lookup関数などを適用する. elems, assocs, sizeなどはData.Mapの参照関数で, Jungle ではその関数をそのまま利用している. -参照関数の基本的な機能をまとめて説明する. +木構造の参照関数の基本的な機能をまとめて説明する. \paragraph*{getAttributes} 対象の Path に存在する属性を Key を用いて参照できる.