summaryrefslogtreecommitdiff
path: root/manuals/sly/Coroutines.html
diff options
context:
space:
mode:
Diffstat (limited to 'manuals/sly/Coroutines.html')
-rw-r--r--manuals/sly/Coroutines.html134
1 files changed, 134 insertions, 0 deletions
diff --git a/manuals/sly/Coroutines.html b/manuals/sly/Coroutines.html
new file mode 100644
index 0000000..26e5c73
--- /dev/null
+++ b/manuals/sly/Coroutines.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- Copyright (C) 2013, 2014 David Thompson davet@gnu.org
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+
+A copy of the license is also available from the Free Software
+Foundation Web site at http://www.gnu.org/licenses/fdl.html.
+
+
+The document was typeset with
+http://www.texinfo.org/ (GNU Texinfo).
+ -->
+<!-- Created by GNU Texinfo 6.0, http://www.gnu.org/software/texinfo/ -->
+<head>
+<title>Sly: Coroutines</title>
+
+<meta name="description" content="Sly: Coroutines">
+<meta name="keywords" content="Sly: Coroutines">
+<meta name="resource-type" content="document">
+<meta name="distribution" content="global">
+<meta name="Generator" content="makeinfo">
+<meta charset="UTF-8">
+<link href="index.html#Top" rel="start" title="Top">
+<link href="Index.html#Index" rel="index" title="Index">
+<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
+<link href="Time.html#Time" rel="up" title="Time">
+<link href="Agendas.html#Agendas" rel="next" title="Agendas">
+<link href="Signals.html#Signals" rel="prev" title="Signals">
+<style type="text/css">
+<!--
+a.summary-letter {text-decoration: none}
+blockquote.indentedblock {margin-right: 0em}
+blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
+blockquote.smallquotation {font-size: smaller}
+div.display {margin-left: 3.2em}
+div.example {margin-left: 3.2em}
+div.lisp {margin-left: 3.2em}
+div.smalldisplay {margin-left: 3.2em}
+div.smallexample {margin-left: 3.2em}
+div.smalllisp {margin-left: 3.2em}
+kbd {font-style: oblique}
+pre.display {font-family: inherit}
+pre.format {font-family: inherit}
+pre.menu-comment {font-family: serif}
+pre.menu-preformatted {font-family: serif}
+pre.smalldisplay {font-family: inherit; font-size: smaller}
+pre.smallexample {font-size: smaller}
+pre.smallformat {font-family: inherit; font-size: smaller}
+pre.smalllisp {font-size: smaller}
+span.nocodebreak {white-space: nowrap}
+span.nolinebreak {white-space: nowrap}
+span.roman {font-family: serif; font-weight: normal}
+span.sansserif {font-family: sans-serif; font-weight: normal}
+ul.no-bullet {list-style: none}
+-->
+</style>
+
+
+</head>
+
+<body lang="en">
+<a name="Coroutines"></a>
+<div class="header">
+<p>
+Next: <a href="Agendas.html#Agendas" accesskey="n" rel="next">Agendas</a>, Previous: <a href="Signals.html#Signals" accesskey="p" rel="prev">Signals</a>, Up: <a href="Time.html#Time" accesskey="u" rel="up">Time</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
+</div>
+<hr>
+<a name="Coroutines-1"></a>
+<h4 class="subsection">4.3.2 Coroutines</h4>
+
+<div class="example">
+<pre class="example">(use-modules (sly coroutine))
+</pre></div>
+
+<p>Coroutines are the building block for cooperative multitasking. When
+used with agendas, they are a powerful mechanism for writing
+algorithms that span multiple clock ticks in a straightforward, linear
+fashion. Sly&rsquo;s coroutines are built on top of Guile&rsquo;s delimited
+continuations, called prompts.
+</p>
+<p>To run a procedure as a coroutine, use the <code>call-with-coroutine</code>
+procedure. Once inside the coroutine prompt, the <code>yield</code>
+procedure can be used to pause the procedure and pass its continuation
+to a callback procedure. The callback may call the continuation at
+its convenience, resuming the original procedure.
+</p>
+<p>Coroutines are particularly useful in conjunction with <a href="Agendas.html#Agendas">Agendas</a>.
+</p>
+<dl>
+<dt><a name="index-call_002dwith_002dcoroutine"></a>Scheme Procedure: <strong>call-with-coroutine</strong> <em><var>thunk</var></em></dt>
+<dd><p>Apply <var>thunk</var> within a coroutine prompt.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-coroutine"></a>Scheme Syntax: <strong>coroutine</strong> <em><var>body</var> &hellip;</em></dt>
+<dd><p>Evaluate <var>body</var> within a coroutine prompt.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-colambda"></a>Scheme Syntax: <strong>colambda</strong> <em><var>args</var> <var>body</var> &hellip;</em></dt>
+<dd><p>Syntacic sugar for a <code>lambda</code> expression whose <var>body</var> is run
+within a coroutine prompt.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-codefine"></a>Scheme Syntax: <strong>codefine</strong> <em>(<var>name</var> <var>formals</var> &hellip;) <var>body</var> &hellip;</em></dt>
+<dd><p>Syntacic sugar for defining a procedure called <var>name</var> with formal
+arguments <var>formals</var> whose <var>body</var> is run within a coroutine
+prompt.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-codefine_002a"></a>Scheme Syntax: <strong>codefine*</strong> <em>(<var>name</var> <var>formals</var> &hellip;) <var>body</var> &hellip;</em></dt>
+<dd><p>Syntacic sugar for defining a procedure called <var>name</var> with
+optional and keyword arguments <var>formals</var> whose <var>body</var> is run
+within a coroutine prompt.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-yield"></a>Scheme Procedure: <strong>yield</strong> <em><var>callback</var></em></dt>
+<dd><p>Yield continuation to the procedure <var>callback</var>.
+</p></dd></dl>
+
+
+
+
+</body>
+</html>