# HG changeset patch # User Daichi TOMA # Date 1374191316 -32400 # Node ID 7c04b92ec5e98c503690bd7d359e35b536c3f9f5 # Parent 1b51599130cbbb26c8abaa2e458a46998e8172d3 fix diff -r 1b51599130cb -r 7c04b92ec5e9 Paper/jssst.tex --- a/Paper/jssst.tex Fri Jul 19 05:25:03 2013 +0900 +++ b/Paper/jssst.tex Fri Jul 19 08:48:36 2013 +0900 @@ -121,7 +121,7 @@ ソースコード \ref{warp_sample}は、URLによって出力する結果を変更するウェブアプリケーションである。 /hello/worldへアクセスがあった場合は、インクリメントされる counter が表示される。 -\paragraph*{main 関数} +\paragraph*{main} HTTP サーバを起動するには、Warp の run 関数を利用する。 run 関数は、利用する Port 番号と、application というリクエストを受けて何かしらのレスポンスを返す関数の2つを引数として受け取る。 @@ -133,18 +133,18 @@ IORef 自体が入出力を行うわけではなく、単なる入出力操作の指示にすぎない。 IO モナドとして糊付けされた単一のアクションに main という名前を付けて実行することで処理系が入出力処理を行う。 -\paragraph*{application 及び routes , findRoute 関数} +\paragraph*{application 及び routes , findRoute} application の実装では、routes という関数を独自に定義して、URL によって出力を変更している。 application に渡されるリクエストはデータ型で様々な情報が含まれている。 その中のひとつに pathInfo という、URL から hostname/port と、クエリを取り除いたリストがある。 この情報を routes という関数に渡すことで、routeSetting というリストから一致する URL がないか調べる。 routeSetting は、URL のリストとレスポンスを返す関数のタプルのリストである。 -\paragraph*{notFound 及び hello 関数} +\paragraph*{notFound 及び hello} レスポンスを返す関数は、いくつか定義されている。 その中で利用されている responseLBS は文字列からレスポンスを構築するためのコンストラクタである。 -\paragraph*{world 関数} +\paragraph*{world 及び incCount} world は、インクリメントされる counter を表示するための関数である。 IORef 内のデータは直接触ることができないため、atomicModifyIORef を利用してデータの更新を行なっている。 atomicModifyIORef は、データの更新をスレッドセーフに行うことができる。 @@ -242,7 +242,7 @@ \paragraph*{木の作成} はじめに、データベースオブジェクトと木の作成方法について述べる。 Jungle は複数の木を保持することができる。 -木には名前がついており、名前を利用して作成・編集・削除を行うことができる。 +木には名前がついており、名前を利用して作成・編集・削除を行うことができる。 \\ \begin{lstlisting}[label=new_jung, caption=データベースオブジェクトと木の作成] jungle = createJungle @@ -307,7 +307,7 @@ 関数型プログラミングでは、コードは短く簡潔になり、生産性が向上する。 Java 版の Jungle の実装と比較すると、コード行数は約3000行から約150行へ短くなった。 -また開発期間はJava版の実装で、3 ヶ月程度であったが、Haskell 版の実装は 2 週間程度であった。 +また開発期間はJava版の実装で、3 ヶ月程度でかかったが、Haskell 版の実装は 2 週間程度であった。 \section{木構造データベース Jungle を用いた CMS の検証} 木構造データベース Jungle 及び Warp を用いて簡単な掲示板ウェブアプリケーションを作成した。