diff paper/cbc.tex @ 15:6dedd4ed6b6d

Update cbc description
author atton <atton@cr.ie.u-ryukyu.ac.jp>
date Thu, 19 Jan 2017 11:39:10 +0900
parents 6bf2e0196a1e
children 3ffd17f96e06
line wrap: on
line diff
--- a/paper/cbc.tex	Thu Jan 19 11:29:13 2017 +0900
+++ b/paper/cbc.tex	Thu Jan 19 11:39:10 2017 +0900
@@ -26,6 +26,8 @@
 
 % }}}
 
+% {{{ Continuation based C における CodeSegment と DataSegment
+
 \section{Continuation based C における CodeSegment と DataSegment}
 最も基本的な CbC のソースコードをリスト\ref{src:goto}に、ソースコードが実行される流れを図\ref{fig:goto}に示す。
 Continuation based C における CodeSegment は返り値を持たない関数として表現される。
@@ -51,9 +53,22 @@
 CbC の軽量継続は呼び出し元の情報を持たないため、スタックを破棄しながら処理を続けていく。
 よって、リスト\ref{src:goto} のプログラムでは cs0  から cs1 へと継続した後にcs0 へ戻ることはできない。
 
-% TODO: factorial
+もう少し複雑な CbC のソースコードをリスト\ref{src:factrial}に、実行される流れを図\ref{fig:factrial}に示す。
+このソースコードは整数の階乗を求めるプログラムである。
+CodeSegment factorial0 では自分自身への再帰的な継続を用いて階乗を計算している。
+軽量継続時には関数呼び出しのスタックは存在しないが、計算中の値を DataSegment で持つことで再帰を含むループ処理も行なうことができる。
+
+\lstinputlisting[label=src:factrial, caption=階乗を求める CbC プログラム] {src/factrial.cbc}
 
+\begin{figure}[htbp]
+    \begin{center}
+        \includegraphics[scale=0.8]{fig/factorial.pdf}
+        \caption{階乗を求める CbC プログラム}
+        \label{fig:factrial}
+    \end{center}
+\end{figure}
 
+% }}}
 
 \section{MetaCodeSegment と MetaDataSegment}
 \section{GearsOS}