File: ch02s10s02.html

package info (click to toggle)
gimp-help 2%2B0.7-5
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 30,852 kB
  • ctags: 4
  • sloc: xml: 104,248; sh: 544; makefile: 262; perl: 42
file content (287 lines) | stat: -rw-r--r-- 11,380 bytes parent folder | download
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
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>10.2. Variables And Functions</title>
    <link rel="stylesheet" href="gimp-help-plain.css" type="text/css" />
    <link rel="stylesheet" href="gimp-help-screen.css" type="text/css" />
    <meta name="generator" content="DocBook XSL Stylesheets V1.66.1" />
    <link rel="start" href="index.html" title="&#10;      &#10;    " />
    <link rel="up" href="ch02s10.html" title="10. A Script-Fu Tutorial" />
    <link rel="prev" href="ch02s10.html" title="10. A Script-Fu Tutorial" />
    <link rel="next" href="ch02s10s03.html" title="10.3. Lists, Lists And More Lists" />
  </head>
  <body>
    <div xmlns="" class="navheader">
      <table width="100%" summary="Navigation header">
        <tr>
          <th colspan="3" align="center" id="chaptername">10.2. Variables And Functions</th>
        </tr>
        <tr>
          <td width="20%" align="left"><a accesskey="p" href="ch02s10.html">Prev</a> </td>
          <th width="60%" align="center" id="sectionname">10.2. Variables And Functions</th>
          <td width="20%" align="right"> <a accesskey="n" href="ch02s10s03.html">Next</a></td>
        </tr>
      </table>
      <hr />
    </div>
    <div class="sect2" lang="en" xml:lang="en">
      <div class="titlepage">
        <div>
          <div>
            <h3 class="title"><a id="id3316621"></a>10.2. Variables And Functions</h3>
          </div>
        </div>
      </div>
      <p>
      Now that we know that every Scheme statement is enclosed in
      parentheses, and that the function name/operator is listed first,
      we need to know how to create and use variables, and how to create
      and use functions. We'll start with the variables. 
    </p>
      <div class="simplesect" lang="en" xml:lang="en">
        <div class="titlepage">
          <div>
            <div>
              <h4 class="title"><a id="id3314026"></a>Declaring Variables</h4>
            </div>
          </div>
        </div>
        <p>
        Although there are a couple of different methods for declaring
        variables, the preferred method is to use the let*
        construct. If you're familiar with other programming
        languages, this construct is equivalent to defining a list of
        local variables and a scope in which they're active. As an
        example, to declare two variables, a and b, initialized to 1
        and 2, respectively, you'd write: 
      </p>
        <pre class="programlisting">
         (let*  (
                   (a 1)
                   (b 2)
                )
                (+ a b)
         )
      </pre>
        <p>
        or, as one line:
      </p>
        <pre class="programlisting">
        (let* ( (a 1) (b 2) ) (+ a b) )
      </pre>
        <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
          <table border="0" summary="Note">
            <tr>
              <td rowspan="2" align="center" valign="top" width="25">
                <img alt="[Note]" src="../images/note.png" />
              </td>
              <th align="left">Note</th>
            </tr>
            <tr>
              <td colspan="2" align="left" valign="top">
                <p>
	  You'll have to put all of this on one line if you're using the
	  console window. In general, however, you'll want to adopt a
	  similar practice of indentation to help make your scripts more
	  readable. We'll talk a bit more about this in the section on
	  White Space. 
	</p>
              </td>
            </tr>
          </table>
        </div>
        <p>
        This declares two local variables, a and b, initializes them,
        then prints the sum of the two variables. 
      </p>
      </div>
      <div class="simplesect" lang="en" xml:lang="en">
        <div class="titlepage">
          <div>
            <div>
              <h4 class="title"><a id="id3316712"></a>What Is A Local Variable?</h4>
            </div>
          </div>
        </div>
        <p>
        You'll notice that we wrote the summation <tt class="code">(+ a b)</tt>
        within the parens of the <tt class="code">let*</tt> expression, not after it. 
      </p>
        <p>
        This is because the <tt class="code">let*</tt> statement defines an
        area in your script in which the declared variables are
        usable; if you type the (+ a b) statement after the (let* ...)
        statement, you'll get an error, because the declared variables
        are only valid within the context of the <tt class="code">let*</tt> statement; they
        are what programmers call local variables. 
      </p>
      </div>
      <div class="simplesect" lang="en" xml:lang="en">
        <div class="titlepage">
          <div>
            <div>
              <h4 class="title"><a id="id3316713"></a>The General Syntax Of <tt class="code">let*</tt></h4>
            </div>
          </div>
        </div>
        <p>
        The general form of a <tt class="code">let*</tt> statement is:
      </p>
        <pre class="programlisting">
        (let* ( <i class="replaceable"><tt>variables</tt></i> ) <i class="replaceable"><tt>expressions</tt></i> )
      </pre>
        <p>
        where variables are declared within parens, e.g., (a 2), and
        expressions are any valid Scheme expressions. Remember that
        the variables declared here are only valid within the
        <tt class="code">let*</tt> statement -- they're local variables. 
      </p>
      </div>
      <div class="simplesect" lang="en" xml:lang="en">
        <div class="titlepage">
          <div>
            <div>
              <h4 class="title"><a id="id3314719"></a>White Space</h4>
            </div>
          </div>
        </div>
        <p>
        Previously, we mentioned the fact that you'll probably want to
        use indentation to help clarify and organize your
        scripts. This is a good policy to adopt, and is not a problem
        in Scheme -- white space is ignored by the Scheme interpreter,
        and can thus be liberally applied to help clarify and organize
        the code within a script. However, if you're working in
        Script-Fu's Console window, you'll have to enter an entire
        expression on one line; that is, everything between the
        opening and closing parens of an expression must come on one
        line in the Script-Fu Console window. 
      </p>
      </div>
      <div class="simplesect" lang="en" xml:lang="en">
        <div class="titlepage">
          <div>
            <div>
              <h4 class="title"><a id="id3317056"></a>Assigning A New Value To A Variable</h4>
            </div>
          </div>
        </div>
        <p>
        Once you've initialized a variable, you might need to change
        its value later on in the script. Use the set! statement to
        change the variable's value: 
      </p>
        <pre class="programlisting">
        (let* ( (theNum 10) ) (set! theNum (+ theNum \ theNum)) )
      </pre>
        <p>
        Try to guess what the above statement will do, then go ahead
        and enter it in the Script-Fu Console window. 
      </p>
        <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
          <table border="0" summary="Note">
            <tr>
              <td rowspan="2" align="center" valign="top" width="25">
                <img alt="[Note]" src="../images/note.png" />
              </td>
              <th align="left">Note</th>
            </tr>
            <tr>
              <td colspan="2" align="left" valign="top">
                <p>
	  The "\" indicates that there is no line break. Ignore it (don't
	  type it in your Script-Fu console and don't hit Enter), just
	  continue with the next line. 
	</p>
              </td>
            </tr>
          </table>
        </div>
      </div>
      <div class="simplesect" lang="en" xml:lang="en">
        <div class="titlepage">
          <div>
            <div>
              <h4 class="title"><a id="id3316869"></a>Functions</h4>
            </div>
          </div>
        </div>
        <p>
        Now that you've got the hang of variables, let's get to work
        with some functions. You declare a function with the following
        syntax: 
      </p>
        <pre class="programlisting">
        (define (<i class="replaceable"><tt>name</tt></i> <i class="replaceable"><tt>param-list</tt></i>) <i class="replaceable"><tt>expressions</tt></i>)
      </pre>
        <p>
        where <i class="replaceable"><tt>name</tt></i> is the name assigned to
        this function, <i class="replaceable"><tt>param-list</tt></i> is a
        space-delimited list of parameter names, and
        <i class="replaceable"><tt>expressions</tt></i> is a series of
        expressions that the function executes when it's called. For
        example:  
      </p>
        <pre class="programlisting">
        (define (AddXY inX inY) (+ inX inY) )
      </pre>
        <p>
        <tt class="varname">AddXY</tt> is the function's name and
        <tt class="varname">inX</tt> and <tt class="varname">inY</tt> are the
        variables. This function takes its two parameters and adds
        them together. 
      </p>
        <p>
        If you've programmed in other imperative languages (like
        C/C++, Java, Pascal, etc.), you might notice that a couple of
        things are absent in this function definition when compared to
        other programming languages. 
      </p>
        <div class="itemizedlist">
          <ul type="disc">
            <li>
              <p>
          First, notice that the parameters don't have any "types"
          (that is, we didn't declare them as strings, or integers,
          etc.). Scheme is a type-less language. This is handy and
          allows for quicker script writing. 
        </p>
            </li>
            <li>
              <p>
            Second, notice that we don't need to worry about how to
            "return" the result of our function -- the last statement is
            the value "returned" when calling this function. Type the
            function into the console, then try something like:
          </p>
              <pre class="programlisting">
            (AddXY (AddXY 5 6) 4)
          </pre>
            </li>
          </ul>
        </div>
      </div>
    </div>
    <div class="navfooter">
      <hr />
      <table width="100%" summary="Navigation footer">
        <tr>
          <td width="40%" align="left"><a accesskey="p" href="ch02s10.html">Prev</a> </td>
          <td width="20%" align="center">
            <a accesskey="u" href="ch02s10.html">Up</a>
          </td>
          <td width="40%" align="right"> <a accesskey="n" href="ch02s10s03.html">Next</a></td>
        </tr>
        <tr>
          <td width="40%" align="left" valign="top">10. A Script-Fu Tutorial </td>
          <td width="20%" align="center">
            <a accesskey="h" href="index.html">Home</a>
          </td>
          <td width="40%" align="right" valign="top"> 10.3. Lists, Lists And More Lists</td>
        </tr>
      </table>
    </div>
  </body>
</html>