summaryrefslogtreecommitdiff
path: root/manuals/sly/Agendas.html
blob: b30aa981cfc18544804f220f465de00d135fea45 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
<!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: Agendas</title>

<meta name="description" content="Sly: Agendas">
<meta name="keywords" content="Sly: Agendas">
<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="Input.html#Input" rel="next" title="Input">
<link href="Coroutines.html#Coroutines" rel="prev" title="Coroutines">
<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="Agendass"></a>
<div class="header">
<p>
Previous: <a href="Coroutines.html#Coroutines" accesskey="p" rel="prev">Coroutines</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="Agendas-1"></a>
<h4 class="subsection">4.3.3 Agendas</h4>

<div class="example">
<pre class="example">(use-modules (sly agenda))
</pre></div>

<p>Agendas are used to schedule procedures to be called at distinct
points in time.  One agenda, stored in the <code>current-agenda</code>
parameter, is active at any given time.  A global agenda is initially
bound and is sufficient for most needs.  When a separate scheduler is
required (see <a href="REPL.html#REPL">REPL</a> for one such case), the parameter can be
rebound using <code>parameterize</code> or <code>with-agenda</code> form.
</p>
<dl>
<dt><a name="index-make_002dagenda"></a>Scheme Procedure: <strong>make-agenda</strong></dt>
<dd><p>Create a new, empty agenda.
</p></dd></dl>

<dl>
<dt><a name="index-agenda_003f"></a>Scheme Syntax: <strong>agenda?</strong> <em><var>obj</var></em></dt>
<dd><p>Return <code>#t</code> if <var>obj</var> is an agenda.
</p></dd></dl>

<dl>
<dt><a name="index-current_002dagenda"></a>Scheme Variable: <strong>current-agenda</strong></dt>
<dd><p>A parameter containing the current, dynamically scoped agenda object.
</p></dd></dl>

<dl>
<dt><a name="index-agenda_002dtime"></a>Scheme Procedure: <strong>agenda-time</strong></dt>
<dd><p>Return the time of the current agenda.
</p></dd></dl>

<dl>
<dt><a name="index-with_002dagenda"></a>Scheme Syntax: <strong>with-agenda</strong> <em><var>agenda</var> <var>body</var> &hellip;</em></dt>
<dd><p>Evaluate <var>body</var> with <code>current-agenda</code> bound to <var>agenda</var>.
</p></dd></dl>

<dl>
<dt><a name="index-agenda_002dtick_0021"></a>Scheme Procedure: <strong>agenda-tick!</strong></dt>
<dd><p>Increment time by 1 for the current agenda and run scheduled
procedures.
</p></dd></dl>

<dl>
<dt><a name="index-agenda_002dclear_0021"></a>Scheme Procedure: <strong>agenda-clear!</strong></dt>
<dd><p>Remove all scheduled procedures from the current agenda.
</p></dd></dl>

<dl>
<dt><a name="index-schedule"></a>Scheme Procedure: <strong>schedule</strong> <em><var>thunk</var> [<var>delay</var>]</em></dt>
<dd><p>Schedule <var>thunk</var> to be applied after <var>delay</var> ticks of the
current agenda.  The default <var>delay</var> is one tick.
</p></dd></dl>

<dl>
<dt><a name="index-schedule_002dinterval"></a>Scheme Procedure: <strong>schedule-interval</strong> <em><var>thunk</var> <var>interval</var></em></dt>
<dd><p>Schedule <var>thunk</var> to be applied every <var>interval</var> ticks of the
current agenda, forever.
</p></dd></dl>

<dl>
<dt><a name="index-schedule_002deach"></a>Scheme Procedure: <strong>schedule-each</strong> <em><var>thunk</var></em></dt>
<dd><p>Schedule <var>thunk</var> to be applied upon every tick of the current
agenda, forever.
</p></dd></dl>

<p><a href="Coroutines.html#Coroutines">Coroutines</a> become particularly useful for game programming when
combined with the agenda.  For example, a computer controller opponent
could periodically pause its AI algorithm to give the rest of the game
world a chance to do some processing.  By using the <code>wait</code>
procedure, algorithms that span multiple ticks of game time can be
written in a straightforward, natural way.
</p>
<dl>
<dt><a name="index-wait"></a>Scheme Procedure: <strong>wait</strong> <em><var>delay</var></em></dt>
<dd><p>Abort the current coroutine prompt and schedule the continuation to be
run after <var>delay</var> ticks of the current agenda.
</p></dd></dl>
<hr>
<div class="header">
<p>
Previous: <a href="Coroutines.html#Coroutines" accesskey="p" rel="prev">Coroutines</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>



</body>
</html>