fixed SICP link
[glow:artanis.git] / feed.atom
1 <?xml version="1.0" encoding="utf-8"?>
2 <feed xmlns="http://www.w3.org/2005/Atom">
3   <generator uri="http://3e8.org/chickadee/atom" version="0.1.1">atom egg for Chicken</generator>
4   <icon>www.web-artanis.comimp/icon.png</icon>
5   <id>tag:web-artanis.com,2010-08-29:/</id>
6   <link href="www.web-artanis.com/" rel="alternate" type="text/html" />
7   <link href="www.web-artanis.com/feed.atom" rel="self" type="application/atom+xml" />
8   <logo>www.web-artanis.comimp/logo.png</logo>
9   <subtitle type="text">The atom of Artanis site</subtitle>
10   <title type="text">atom</title>
11   <updated>2013-07-24T08:01:27Z</updated>
12   <entry>
13     <author>
14       <name>Mu Lei known as NalaGinrut &lt;nalaginrut@gmail.com&gt;</name>
15     </author>
16     <content type="html">
17 &lt;h3 id="sailing-to-devnull"&gt;Sailing to /dev/null&lt;/h3&gt;
18 &lt;p&gt;That is no future for mediocre coder.&lt;/p&gt;
19 &lt;p&gt;The hacker is one another's arm. Codes in the editors.&lt;/p&gt;
20 &lt;p&gt;Those dying generations - at their song.&lt;/p&gt;
21 &lt;pre&gt;&lt;tt class="highlight scheme-language"&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;use-modules &lt;span class="paren2"&gt;(&lt;span class="default"&gt;artanis artanis&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
22
23 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;get &lt;span class="string"&gt;&amp;quot;/hello&amp;quot;&lt;/span&gt;
24  &lt;span class="paren2"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;lambda&lt;/span&gt;&lt;/i&gt; &lt;span class="paren3"&gt;(&lt;span class="default"&gt;rc&lt;/span&gt;)&lt;/span&gt;
25   &lt;span class="paren3"&gt;(&lt;span class="default"&gt;response-emit &lt;span class="string"&gt;&amp;quot;hello world&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
26 &lt;span class="comment"&gt;;; run it 
27 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;run &lt;span class="keyword"&gt;#:port&lt;/span&gt; 8080&lt;/span&gt;)&lt;/span&gt;&lt;/tt&gt;&lt;/pre&gt;
28 &lt;pre&gt;&lt;tt class="highlight sh-language"&gt;curl localhost:8080/hello
29 ==&amp;gt; hello world&lt;/tt&gt;&lt;/pre&gt;</content>
30     <id>tag:web-artanis.com,2013-07-24:/index.html</id>
31     <published>2013-07-24T08:01:27Z</published>
32     <title type="text">Artanis web-framework</title>
33     <updated>2013-07-24T08:01:27Z</updated>
34     <link href="www.web-artanis.com/index.html" rel="alternate" type="application/xhtml+xml" />
35   </entry>
36   <entry>
37     <author>
38       <name>Mu Lei known as NalaGinrut &lt;nalaginrut@gmail.com&gt;</name>
39     </author>
40     <content type="html">
41 &lt;h3 id="learn-scheme-in-15-minutes"&gt;Learn Scheme in 15 minutes&lt;/h3&gt;
42 &lt;pre&gt;&lt;tt class="highlight scheme-language"&gt;&lt;span class="comment"&gt;;; This gives an introduction to Scheme in 15 minutes
43 &lt;/span&gt;&lt;span class="comment"&gt;;;
44 &lt;/span&gt;&lt;span class="comment"&gt;;; First make sure you read this text by Peter Norvig:
45 &lt;/span&gt;&lt;span class="comment"&gt;;; http://norvig.com/21-days.html
46 &lt;/span&gt;&lt;span class="comment"&gt;;;
47 &lt;/span&gt;&lt;span class="comment"&gt;;; Then install GNU Guile
48 &lt;/span&gt;&lt;span class="comment"&gt;;;
49 &lt;/span&gt;&lt;span class="comment"&gt;;; openSUSE: zypper install guile
50 &lt;/span&gt;&lt;span class="comment"&gt;;; Debian: apt-get install guile (or see your distro instructions)
51 &lt;/span&gt;&lt;span class="comment"&gt;;; MacOSX: Building Guile 2.0 on the Mac
52 &lt;/span&gt;&lt;span class="comment"&gt;;;         http://irrealblog.blogspot.hk/2011/03/building-guile-2.html
53 &lt;/span&gt;&lt;span class="comment"&gt;;; Windows try web: http://repl.it/languages/Scheme
54 &lt;/span&gt;&lt;span class="comment"&gt;;;
55 &lt;/span&gt;&lt;span class="comment"&gt;;; More general information can be found at:
56 &lt;/span&gt;&lt;span class="comment"&gt;;; http://www.gnu.org/software/guile
57 &lt;/span&gt;
58 &lt;span class="comment"&gt;;; Important warning:
59 &lt;/span&gt;&lt;span class="comment"&gt;;;
60 &lt;/span&gt;&lt;span class="comment"&gt;;; Going through this tutorial won&amp;#x27;t damage your computer unless
61 &lt;/span&gt;&lt;span class="comment"&gt;;; you get so angry that you throw it on the floor.  In that case,
62 &lt;/span&gt;&lt;span class="comment"&gt;;; I hereby decline any responsability.  Have fun!
63 &lt;/span&gt;
64 &lt;span class="comment"&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
65 &lt;/span&gt;&lt;span class="comment"&gt;;; 
66 &lt;/span&gt;&lt;span class="comment"&gt;;; Fire up Scheme:
67 &lt;/span&gt;&lt;span class="comment"&gt;;; Type &amp;#x27;guile&amp;#x27; for GNU Guile
68 &lt;/span&gt;&lt;span class="comment"&gt;;; Or just use the browser for web version
69 &lt;/span&gt;&lt;span class="comment"&gt;;;
70 &lt;/span&gt;&lt;span class="comment"&gt;;; Now look at the prompt:
71 &lt;/span&gt;
72 &lt;span class="comment"&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
73 &lt;/span&gt;&lt;span class="comment"&gt;;;
74 &lt;/span&gt;&lt;span class="comment"&gt;;; Semi-colons start comments anywhere on a line.
75 &lt;/span&gt;&lt;span class="comment"&gt;;;
76 &lt;/span&gt;&lt;span class="comment"&gt;;; Scheme programs are made of symbolic expressions (s-exps):
77 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;+ 2 2&lt;/span&gt;)&lt;/span&gt;
78
79 &lt;span class="comment"&gt;;; This symbolic expression reads as &amp;quot;Add 2 to 2&amp;quot;.
80 &lt;/span&gt;
81 &lt;span class="comment"&gt;;; Sexps are enclosed into parentheses, possibly nested:
82 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;+ 2 &lt;span class="paren2"&gt;(&lt;span class="default"&gt;+ 1 1&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
83
84 &lt;span class="comment"&gt;;; A symbolic expression contains atoms or other symbolic
85 &lt;/span&gt;&lt;span class="comment"&gt;;; expressions.  In the above examples, 1 and 2 are atoms,
86 &lt;/span&gt;&lt;span class="comment"&gt;;; (+ 2 (+ 1 1)) and (+ 1 1) are symbolic expressions.
87 &lt;/span&gt;
88 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;+ 3 &lt;span class="paren2"&gt;(&lt;span class="default"&gt;+ 1 2&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
89 &lt;span class="comment"&gt;;; =&amp;gt; 6
90 &lt;/span&gt;
91 &lt;span class="comment"&gt;;; `set!&amp;#x27; stores a value into a variable:
92 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;set! my-name &lt;span class="string"&gt;&amp;quot;NalaGinrut&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
93
94 &lt;span class="comment"&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
95 &lt;/span&gt;&lt;span class="comment"&gt;;; 1. Primitive Datatypes and Operators
96 &lt;/span&gt;&lt;span class="comment"&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
97 &lt;/span&gt;
98 &lt;span class="comment"&gt;;;; Numbers
99 &lt;/span&gt;9999999999999999999999 &lt;span class="comment"&gt;; integers
100 &lt;/span&gt;#b111                  &lt;span class="comment"&gt;; binary =&amp;gt; 7
101 &lt;/span&gt;#o111                  &lt;span class="comment"&gt;; octal =&amp;gt; 73
102 &lt;/span&gt;#x111                  &lt;span class="comment"&gt;; hexadecimal =&amp;gt; 273
103 &lt;/span&gt;3.14                   &lt;span class="comment"&gt;; reals
104 &lt;/span&gt;6.02e+23
105 1/2                    &lt;span class="comment"&gt;; rationals
106 &lt;/span&gt;1+2i                   &lt;span class="comment"&gt;; complex numbers
107 &lt;/span&gt;
108 &lt;span class="comment"&gt;;; Function application is written (f x y z ...)
109 &lt;/span&gt;&lt;span class="comment"&gt;;; where f is a function and x, y, z, ... are operands
110 &lt;/span&gt;&lt;span class="comment"&gt;;; If you want to create a literal list of data, use &amp;#x27; to stop it from
111 &lt;/span&gt;&lt;span class="comment"&gt;;; being evaluated
112 &lt;/span&gt;&amp;#x27;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;+ 1 2&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; (+ 1 2)
113 &lt;/span&gt;&lt;span class="comment"&gt;;; Now, some arithmetic operations
114 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;+ 1 1&lt;/span&gt;)&lt;/span&gt;  &lt;span class="comment"&gt;; =&amp;gt; 2
115 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;- 8 1&lt;/span&gt;)&lt;/span&gt;  &lt;span class="comment"&gt;; =&amp;gt; 7
116 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;* 10 2&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; 20
117 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;expt 2 3&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; 8
118 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;quotient 5 2&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; 2
119 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;remainder 5 2&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; 1
120 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;/ 35 5&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; 7
121 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;/ 1 3&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; 1/3
122 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;exact-&amp;gt;inexact 1/3&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; 0.3333333333333333
123 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;+ 1+2i  2-3i&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; 3-1i
124 &lt;/span&gt;
125 &lt;span class="comment"&gt;;;; Booleans
126 &lt;/span&gt;#t &lt;span class="comment"&gt;; for true
127 &lt;/span&gt;#f &lt;span class="comment"&gt;; for false -- any value other than #f is true
128 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;not #t&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; #f
129 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;and 0 #f &lt;span class="paren2"&gt;(&lt;span class="default"&gt;error &lt;span class="string"&gt;&amp;quot;doesn&amp;#x27;t get here&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; #f
130 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;or #f 0 &lt;span class="paren2"&gt;(&lt;span class="default"&gt;error &lt;span class="string"&gt;&amp;quot;doesn&amp;#x27;t get here&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;  &lt;span class="comment"&gt;; =&amp;gt; 0
131 &lt;/span&gt;
132 &lt;span class="comment"&gt;;;; Characters
133 &lt;/span&gt;&lt;span class="character"&gt;#\A&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; #\A
134 &lt;/span&gt;&lt;span class="character"&gt;#\λ&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; #\λ
135 &lt;/span&gt;&lt;span class="character"&gt;#\u03BB&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; #\λ
136 &lt;/span&gt;
137 &lt;span class="comment"&gt;;;; Strings are fixed-length array of characters.
138 &lt;/span&gt;&lt;span class="string"&gt;&amp;quot;Hello, world!&amp;quot;&lt;/span&gt;
139 &lt;span class="string"&gt;&amp;quot;Benjamin &lt;/span&gt;&lt;span class="string"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Bugsy&lt;/span&gt;&lt;span class="string"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="string"&gt; Siegel&amp;quot;&lt;/span&gt;   &lt;span class="comment"&gt;; backslash is an escaping character
140 &lt;/span&gt;&lt;span class="string"&gt;&amp;quot;Foo&lt;/span&gt;&lt;span class="string"&gt;\t&lt;/span&gt;&lt;span class="string"&gt;bar&lt;/span&gt;&lt;span class="string"&gt;\4&lt;/span&gt;&lt;span class="string"&gt;1&lt;/span&gt;&lt;span class="string"&gt;\x&lt;/span&gt;&lt;span class="string"&gt;21&lt;/span&gt;&lt;span class="string"&gt;\u&lt;/span&gt;&lt;span class="string"&gt;0021&lt;/span&gt;&lt;span class="string"&gt;\a&lt;/span&gt;&lt;span class="string"&gt;\r&lt;/span&gt;&lt;span class="string"&gt;\n&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt; &lt;span class="comment"&gt;; includes C escapes, Unicode
141 &lt;/span&gt;
142 &lt;span class="comment"&gt;;; Strings can be added too!
143 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;string-append &lt;span class="string"&gt;&amp;quot;Hello &amp;quot;&lt;/span&gt; &lt;span class="string"&gt;&amp;quot;world!&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; &amp;quot;Hello world!&amp;quot;
144 &lt;/span&gt;
145 &lt;span class="comment"&gt;;; A string can be treated like a list of characters
146 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;string-ref &lt;span class="string"&gt;&amp;quot;Apple&amp;quot;&lt;/span&gt; 0&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; #\A
147 &lt;/span&gt;
148 &lt;span class="comment"&gt;;; format can be used to format strings:
149 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;format #t &lt;span class="string"&gt;&amp;quot;~a can be ~a&amp;quot;&lt;/span&gt; &lt;span class="string"&gt;&amp;quot;strings&amp;quot;&lt;/span&gt; &lt;span class="string"&gt;&amp;quot;formatted&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
150 &lt;span class="comment"&gt;;; ==&amp;gt; print &amp;quot;strings can be formatted&amp;quot; on screen
151 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; str &lt;span class="paren2"&gt;(&lt;span class="default"&gt;format #f &lt;span class="string"&gt;&amp;quot;~a can be ~a&amp;quot;&lt;/span&gt; &lt;span class="string"&gt;&amp;quot;strings&amp;quot;&lt;/span&gt; &lt;span class="string"&gt;&amp;quot;formatted&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
152 &lt;span class="comment"&gt;;; str was assigned to &amp;quot;strings can be formatted&amp;quot;
153 &lt;/span&gt;
154 &lt;span class="comment"&gt;;; Printing is pretty easy
155 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;display &lt;span class="string"&gt;&amp;quot;I&amp;#x27;m Guile. Nice to meet you!&lt;/span&gt;&lt;span class="string"&gt;\n&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
156
157 &lt;span class="comment"&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
158 &lt;/span&gt;&lt;span class="comment"&gt;;; 2. Variables
159 &lt;/span&gt;&lt;span class="comment"&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
160 &lt;/span&gt;&lt;span class="comment"&gt;;; You can create a variable using define
161 &lt;/span&gt;&lt;span class="comment"&gt;;; a variable name can use any character except: ()[]{}&amp;quot;,&amp;#x27;`;#|\
162 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; some-var 5&lt;/span&gt;)&lt;/span&gt;
163 some-var &lt;span class="comment"&gt;; =&amp;gt; 5
164 &lt;/span&gt;
165 &lt;span class="comment"&gt;;; Accessing a previously unassigned variable is an exception
166 &lt;/span&gt;&lt;span class="comment"&gt;; x ; =&amp;gt; x: undefined ...
167 &lt;/span&gt;
168 &lt;span class="comment"&gt;;; Local binding: `me&amp;#x27; is bound to &amp;quot;Bob&amp;quot; only within the (let ...)
169 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;let&lt;/span&gt;&lt;/i&gt; &lt;span class="paren2"&gt;(&lt;span class="default"&gt;&lt;span class="paren3"&gt;(&lt;span class="default"&gt;me &lt;span class="string"&gt;&amp;quot;Bob&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
170   &lt;span class="string"&gt;&amp;quot;Alice&amp;quot;&lt;/span&gt;
171   me&lt;/span&gt;)&lt;/span&gt; 
172 &lt;span class="comment"&gt;;; =&amp;gt; &amp;quot;Bob&amp;quot;
173 &lt;/span&gt;
174 &lt;span class="comment"&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
175 &lt;/span&gt;&lt;span class="comment"&gt;;; 3. Structs and Collections
176 &lt;/span&gt;&lt;span class="comment"&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
177 &lt;/span&gt;
178 &lt;span class="comment"&gt;;; Record Type (Skip this chapter if you&amp;#x27;re trying web version
179 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;use-modules &lt;span class="paren2"&gt;(&lt;span class="default"&gt;srfi srfi-9&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
180 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define-record-type&lt;/span&gt;&lt;/i&gt; dog 
181   &lt;span class="paren2"&gt;(&lt;span class="default"&gt;make-dog name breed age&lt;/span&gt;)&lt;/span&gt;
182   dog?
183   &lt;span class="paren2"&gt;(&lt;span class="default"&gt;name dog-name&lt;/span&gt;)&lt;/span&gt;
184   &lt;span class="paren2"&gt;(&lt;span class="default"&gt;breed dog-breed&lt;/span&gt;)&lt;/span&gt;
185   &lt;span class="paren2"&gt;(&lt;span class="default"&gt;age dog-age&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
186 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; my-pet
187   &lt;span class="paren2"&gt;(&lt;span class="default"&gt;make-dog &lt;span class="string"&gt;&amp;quot;lassie&amp;quot;&lt;/span&gt; &lt;span class="string"&gt;&amp;quot;collie&amp;quot;&lt;/span&gt; 5&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
188 my-pet &lt;span class="comment"&gt;; =&amp;gt; #&amp;lt;dog&amp;gt;
189 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;dog? my-pet&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; #t
190 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;dog-name my-pet&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; &amp;quot;lassie&amp;quot;
191 &lt;/span&gt;
192 &lt;span class="comment"&gt;;;; Pairs (immutable)
193 &lt;/span&gt;&lt;span class="comment"&gt;;; `cons&amp;#x27; constructs pairs, `car&amp;#x27; and `cdr&amp;#x27; extract the first
194 &lt;/span&gt;&lt;span class="comment"&gt;;; and second elements
195 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;cons 1 2&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; &amp;#x27;(1 . 2)
196 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;car &lt;span class="paren2"&gt;(&lt;span class="default"&gt;cons 1 2&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; 1
197 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;cdr &lt;span class="paren2"&gt;(&lt;span class="default"&gt;cons 1 2&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; 2
198 &lt;/span&gt;
199 &lt;span class="comment"&gt;;;; Lists
200 &lt;/span&gt;
201 &lt;span class="comment"&gt;;; Lists are linked-list data structures, made of `cons&amp;#x27; pairs and end
202 &lt;/span&gt;&lt;span class="comment"&gt;;; with a `null&amp;#x27; (or &amp;#x27;()) to mark the end of the list
203 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;cons 1 &lt;span class="paren2"&gt;(&lt;span class="default"&gt;cons 2 &lt;span class="paren3"&gt;(&lt;span class="default"&gt;cons 3 null&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; &amp;#x27;(1 2 3)
204 &lt;/span&gt;&lt;span class="comment"&gt;;; `list&amp;#x27; is a convenience variadic constructor for lists
205 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;list 1 2 3&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; &amp;#x27;(1 2 3)
206 &lt;/span&gt;&lt;span class="comment"&gt;;; and a quote can also be used for a literal list value
207 &lt;/span&gt;&amp;#x27;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;1 2 3&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; &amp;#x27;(1 2 3)
208 &lt;/span&gt;
209 &lt;span class="comment"&gt;;; Can still use `cons&amp;#x27; to add an item to the beginning of a list
210 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;cons 4 &amp;#x27;&lt;span class="paren2"&gt;(&lt;span class="default"&gt;1 2 3&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; &amp;#x27;(4 1 2 3)
211 &lt;/span&gt;
212 &lt;span class="comment"&gt;;; Use `append&amp;#x27; to add lists together
213 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;append &amp;#x27;&lt;span class="paren2"&gt;(&lt;span class="default"&gt;1 2&lt;/span&gt;)&lt;/span&gt; &amp;#x27;&lt;span class="paren2"&gt;(&lt;span class="default"&gt;3 4&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; &amp;#x27;(1 2 3 4)
214 &lt;/span&gt;
215 &lt;span class="comment"&gt;;; Lists are a very basic type, so there is a *lot* of functionality for
216 &lt;/span&gt;&lt;span class="comment"&gt;;; them, a few examples:
217 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;map add1 &amp;#x27;&lt;span class="paren2"&gt;(&lt;span class="default"&gt;1 2 3&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;          &lt;span class="comment"&gt;; =&amp;gt; &amp;#x27;(2 3 4)
218 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;map + &amp;#x27;&lt;span class="paren2"&gt;(&lt;span class="default"&gt;1 2 3&lt;/span&gt;)&lt;/span&gt; &amp;#x27;&lt;span class="paren2"&gt;(&lt;span class="default"&gt;10 20 30&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; &amp;#x27;(11 22 33)
219 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;filter even? &amp;#x27;&lt;span class="paren2"&gt;(&lt;span class="default"&gt;1 2 3 4&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;    &lt;span class="comment"&gt;; =&amp;gt; &amp;#x27;(2 4)
220 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;count even? &amp;#x27;&lt;span class="paren2"&gt;(&lt;span class="default"&gt;1 2 3 4&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;     &lt;span class="comment"&gt;; =&amp;gt; 2
221 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;take &amp;#x27;&lt;span class="paren2"&gt;(&lt;span class="default"&gt;1 2 3 4&lt;/span&gt;)&lt;/span&gt; 2&lt;/span&gt;)&lt;/span&gt;          &lt;span class="comment"&gt;; =&amp;gt; &amp;#x27;(1 2)
222 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;drop &amp;#x27;&lt;span class="paren2"&gt;(&lt;span class="default"&gt;1 2 3 4&lt;/span&gt;)&lt;/span&gt; 2&lt;/span&gt;)&lt;/span&gt;          &lt;span class="comment"&gt;; =&amp;gt; &amp;#x27;(3 4)
223 &lt;/span&gt;
224 &lt;span class="comment"&gt;;;; Vectors
225 &lt;/span&gt;
226 &lt;span class="comment"&gt;;; Vectors are fixed-length arrays
227 &lt;/span&gt;#&lt;span class="paren1"&gt;(&lt;span class="default"&gt;1 2 3&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; &amp;#x27;#(1 2 3)
228 &lt;/span&gt;
229 &lt;span class="comment"&gt;;; Use `vector-append&amp;#x27; to add vectors together
230 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;vector-append #&lt;span class="paren2"&gt;(&lt;span class="default"&gt;1 2 3&lt;/span&gt;)&lt;/span&gt; #&lt;span class="paren2"&gt;(&lt;span class="default"&gt;4 5 6&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; #(1 2 3 4 5 6)
231 &lt;/span&gt;
232 &lt;span class="comment"&gt;;;; Hashes
233 &lt;/span&gt;
234 &lt;span class="comment"&gt;;; Create an immutable hash table (mutable example below)
235 &lt;/span&gt;&lt;span class="comment"&gt;;; For GNU Guile
236 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; m &lt;span class="paren2"&gt;(&lt;span class="default"&gt;make-hash-table&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
237 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;hash-set! m &amp;#x27;a 1&lt;/span&gt;)&lt;/span&gt;
238 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;hash-set! m &amp;#x27;b 2&lt;/span&gt;)&lt;/span&gt;
239 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;hash-set! m &amp;#x27;c 3&lt;/span&gt;)&lt;/span&gt;
240
241 &lt;span class="comment"&gt;;; Retrieve a value
242 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;hash-ref m &amp;#x27;a&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; 1
243 &lt;/span&gt;
244 &lt;span class="comment"&gt;;; Retrieving a non-present value is an exception
245 &lt;/span&gt;&lt;span class="comment"&gt;; (hash-ref m &amp;#x27;d) =&amp;gt; no value found
246 &lt;/span&gt;
247 &lt;span class="comment"&gt;;; You can provide a default value for missing keys
248 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;hash-ref m &amp;#x27;d 0&lt;/span&gt;)&lt;/span&gt;
249 &lt;span class="comment"&gt;;; =&amp;gt; #f
250 &lt;/span&gt;
251 &lt;span class="comment"&gt;;; Use `hash-remove&amp;#x27; to remove keys (functional too)
252 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;hash-remove! m &amp;#x27;a&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; ((b . 2) (c . 3))
253 &lt;/span&gt;
254 &lt;span class="comment"&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
255 &lt;/span&gt;&lt;span class="comment"&gt;;; 3. Functions
256 &lt;/span&gt;&lt;span class="comment"&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
257 &lt;/span&gt;
258 &lt;span class="comment"&gt;;; Use `lambda&amp;#x27; to create functions.
259 &lt;/span&gt;&lt;span class="comment"&gt;;; A function always returns the value of its last expression
260 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;lambda&lt;/span&gt;&lt;/i&gt; &lt;span class="paren2"&gt;(&lt;span class="default"&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="string"&gt;&amp;quot;Hello World&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; #&amp;lt;procedure&amp;gt;
261 &lt;/span&gt;
262 &lt;span class="comment"&gt;;; Use parens to call all functions, including a lambda expression
263 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;span class="paren2"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;lambda&lt;/span&gt;&lt;/i&gt; &lt;span class="paren3"&gt;(&lt;span class="default"&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="string"&gt;&amp;quot;Hello World&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; &amp;quot;Hello World&amp;quot;
264 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;span class="paren2"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;lambda&lt;/span&gt;&lt;/i&gt; &lt;span class="paren3"&gt;(&lt;span class="default"&gt;x&lt;/span&gt;)&lt;/span&gt; &lt;span class="paren3"&gt;(&lt;span class="default"&gt;+ x x&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; 5&lt;/span&gt;)&lt;/span&gt;      &lt;span class="comment"&gt;; =&amp;gt; 10
265 &lt;/span&gt;
266 &lt;span class="comment"&gt;;; Assign a function to a var
267 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; hello-world &lt;span class="paren2"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;lambda&lt;/span&gt;&lt;/i&gt; &lt;span class="paren3"&gt;(&lt;span class="default"&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="string"&gt;&amp;quot;Hello World&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
268 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;hello-world&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; &amp;quot;Hello World&amp;quot;
269 &lt;/span&gt;
270 &lt;span class="comment"&gt;;; You can shorten this using the function definition syntatcic sugae:
271 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; &lt;span class="paren2"&gt;(&lt;span class="default"&gt;hello-world2&lt;/span&gt;)&lt;/span&gt; &lt;span class="string"&gt;&amp;quot;Hello World&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
272
273 &lt;span class="comment"&gt;;; The () in the above is the list of arguments for the function
274 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; hello
275   &lt;span class="paren2"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;lambda&lt;/span&gt;&lt;/i&gt; &lt;span class="paren3"&gt;(&lt;span class="default"&gt;name&lt;/span&gt;)&lt;/span&gt;
276     &lt;span class="paren3"&gt;(&lt;span class="default"&gt;string-append &lt;span class="string"&gt;&amp;quot;Hello &amp;quot;&lt;/span&gt; name&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
277 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;hello &lt;span class="string"&gt;&amp;quot;Steve&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; &amp;quot;Hello Steve&amp;quot;
278 &lt;/span&gt;&lt;span class="comment"&gt;;; ... or equivalently, using a sugared definition:
279 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; &lt;span class="paren2"&gt;(&lt;span class="default"&gt;hello2 name&lt;/span&gt;)&lt;/span&gt;
280   &lt;span class="paren2"&gt;(&lt;span class="default"&gt;string-append &lt;span class="string"&gt;&amp;quot;Hello &amp;quot;&lt;/span&gt; name&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
281
282 &lt;span class="comment"&gt;;; You can have multi-variadic functions too, using `case-lambda&amp;#x27;
283 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; hello3
284   &lt;span class="paren2"&gt;(&lt;span class="default"&gt;case-lambda
285     &lt;span class="paren3"&gt;(&lt;span class="default"&gt;&lt;span class="paren4"&gt;(&lt;span class="default"&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="string"&gt;&amp;quot;Hello World&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
286     &lt;span class="paren3"&gt;(&lt;span class="default"&gt;&lt;span class="paren4"&gt;(&lt;span class="default"&gt;name&lt;/span&gt;)&lt;/span&gt; &lt;span class="paren4"&gt;(&lt;span class="default"&gt;string-append &lt;span class="string"&gt;&amp;quot;Hello &amp;quot;&lt;/span&gt; name&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
287 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;hello3 &lt;span class="string"&gt;&amp;quot;Jake&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; &amp;quot;Hello Jake&amp;quot;
288 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;hello3&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; &amp;quot;Hello World&amp;quot;
289 &lt;/span&gt;&lt;span class="comment"&gt;;; ... or specify optional arguments with a default value expression
290 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; &lt;span class="paren2"&gt;(&lt;span class="default"&gt;hello4 &lt;span class="paren3"&gt;(&lt;span class="default"&gt;name &lt;span class="string"&gt;&amp;quot;World&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
291   &lt;span class="paren2"&gt;(&lt;span class="default"&gt;string-append &lt;span class="string"&gt;&amp;quot;Hello &amp;quot;&lt;/span&gt; name&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
292
293 &lt;span class="comment"&gt;;; Functions can pack extra arguments up in a list
294 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; &lt;span class="paren2"&gt;(&lt;span class="default"&gt;count-args . args&lt;/span&gt;)&lt;/span&gt;
295   &lt;span class="paren2"&gt;(&lt;span class="default"&gt;format #t &lt;span class="string"&gt;&amp;quot;You passed ~a args: ~a&amp;quot;&lt;/span&gt; &lt;span class="paren3"&gt;(&lt;span class="default"&gt;length args&lt;/span&gt;)&lt;/span&gt; args&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
296 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;count-args 1 2 3&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; &amp;quot;You passed 3 args: (1 2 3)&amp;quot;
297 &lt;/span&gt;&lt;span class="comment"&gt;;; ... or with the unsugared `lambda&amp;#x27; form:
298 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; count-args2
299   &lt;span class="paren2"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;lambda&lt;/span&gt;&lt;/i&gt; args
300     &lt;span class="paren3"&gt;(&lt;span class="default"&gt;format #t &lt;span class="string"&gt;&amp;quot;You passed ~a args: ~a&amp;quot;&lt;/span&gt; &lt;span class="paren4"&gt;(&lt;span class="default"&gt;length args&lt;/span&gt;)&lt;/span&gt; args&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
301
302 &lt;span class="comment"&gt;;; You can mix regular and packed arguments
303 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; &lt;span class="paren2"&gt;(&lt;span class="default"&gt;hello-count name . args&lt;/span&gt;)&lt;/span&gt;
304   &lt;span class="paren2"&gt;(&lt;span class="default"&gt;format #t &lt;span class="string"&gt;&amp;quot;Hello ~a, you passed ~a extra args&amp;quot;&lt;/span&gt; name &lt;span class="paren3"&gt;(&lt;span class="default"&gt;length args&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
305 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;hello-count &lt;span class="string"&gt;&amp;quot;Finn&amp;quot;&lt;/span&gt; 1 2 3&lt;/span&gt;)&lt;/span&gt;
306 &lt;span class="comment"&gt;; =&amp;gt; &amp;quot;Hello Finn, you passed 3 extra args&amp;quot;
307 &lt;/span&gt;&lt;span class="comment"&gt;;; ... unsugared:
308 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; hello-count2
309   &lt;span class="paren2"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;lambda&lt;/span&gt;&lt;/i&gt; &lt;span class="paren3"&gt;(&lt;span class="default"&gt;name . args&lt;/span&gt;)&lt;/span&gt;
310     &lt;span class="paren3"&gt;(&lt;span class="default"&gt;format #t &lt;span class="string"&gt;&amp;quot;Hello ~a, you passed ~a extra args&amp;quot;&lt;/span&gt; name &lt;span class="paren4"&gt;(&lt;span class="default"&gt;length args&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
311
312 &lt;span class="comment"&gt;;; And with keywords
313 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; &lt;span class="paren2"&gt;(&lt;span class="default"&gt;hello-k &lt;span class="keyword"&gt;#:name&lt;/span&gt; &lt;span class="paren3"&gt;(&lt;span class="default"&gt;name &lt;span class="string"&gt;&amp;quot;World&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="keyword"&gt;#:greeting&lt;/span&gt; &lt;span class="paren3"&gt;(&lt;span class="default"&gt;g &lt;span class="string"&gt;&amp;quot;Hello&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; . args&lt;/span&gt;)&lt;/span&gt;
314   &lt;span class="paren2"&gt;(&lt;span class="default"&gt;format #t &lt;span class="string"&gt;&amp;quot;~a ~a, ~a extra args&amp;quot;&lt;/span&gt; g name &lt;span class="paren3"&gt;(&lt;span class="default"&gt;length args&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
315 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;hello-k&lt;/span&gt;)&lt;/span&gt;                 &lt;span class="comment"&gt;; =&amp;gt; &amp;quot;Hello World, 0 extra args&amp;quot;
316 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;hello-k 1 2 3&lt;/span&gt;)&lt;/span&gt;           &lt;span class="comment"&gt;; =&amp;gt; &amp;quot;Hello World, 3 extra args&amp;quot;
317 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;hello-k &lt;span class="keyword"&gt;#:greeting&lt;/span&gt; &lt;span class="string"&gt;&amp;quot;Hi&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; &amp;quot;Hi World, 0 extra args&amp;quot;
318 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;hello-k &lt;span class="keyword"&gt;#:name&lt;/span&gt; &lt;span class="string"&gt;&amp;quot;Finn&amp;quot;&lt;/span&gt; &lt;span class="keyword"&gt;#:greeting&lt;/span&gt; &lt;span class="string"&gt;&amp;quot;Hey&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; &amp;quot;Hey Finn, 0 extra args&amp;quot;
319 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;hello-k 1 2 3 &lt;span class="keyword"&gt;#:greeting&lt;/span&gt; &lt;span class="string"&gt;&amp;quot;Hi&amp;quot;&lt;/span&gt; &lt;span class="keyword"&gt;#:name&lt;/span&gt; &lt;span class="string"&gt;&amp;quot;Finn&amp;quot;&lt;/span&gt; 4 5 6&lt;/span&gt;)&lt;/span&gt;
320                                          &lt;span class="comment"&gt;; =&amp;gt; &amp;quot;Hi Finn, 6 extra args&amp;quot;
321 &lt;/span&gt;
322 &lt;span class="comment"&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
323 &lt;/span&gt;&lt;span class="comment"&gt;;; 4. Equality
324 &lt;/span&gt;&lt;span class="comment"&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
325 &lt;/span&gt;
326 &lt;span class="comment"&gt;;; for numbers use `=&amp;#x27;
327 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;= 3 3.0&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; #t
328 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;= 2 1&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; #f
329 &lt;/span&gt;
330 &lt;span class="comment"&gt;;; for object identity use `eq?&amp;#x27;
331 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;eq? 3 3&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; #t
332 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;eq? 3 3.0&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; #f
333 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;eq? &lt;span class="paren2"&gt;(&lt;span class="default"&gt;list 3&lt;/span&gt;)&lt;/span&gt; &lt;span class="paren2"&gt;(&lt;span class="default"&gt;list 3&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; #f
334 &lt;/span&gt;
335 &lt;span class="comment"&gt;;; for collections use `equal?&amp;#x27;
336 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;equal? &lt;span class="paren2"&gt;(&lt;span class="default"&gt;list &amp;#x27;a &amp;#x27;b&lt;/span&gt;)&lt;/span&gt; &lt;span class="paren2"&gt;(&lt;span class="default"&gt;list &amp;#x27;a &amp;#x27;b&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; #t
337 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;equal? &lt;span class="paren2"&gt;(&lt;span class="default"&gt;list &amp;#x27;a &amp;#x27;b&lt;/span&gt;)&lt;/span&gt; &lt;span class="paren2"&gt;(&lt;span class="default"&gt;list &amp;#x27;b &amp;#x27;a&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; #f
338 &lt;/span&gt;
339 &lt;span class="comment"&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
340 &lt;/span&gt;&lt;span class="comment"&gt;;; 5. Control Flow
341 &lt;/span&gt;&lt;span class="comment"&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
342 &lt;/span&gt;
343 &lt;span class="comment"&gt;;;; Conditionals
344 &lt;/span&gt;
345 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;if&lt;/span&gt;&lt;/i&gt; #t               &lt;span class="comment"&gt;; test expression
346 &lt;/span&gt;    &lt;span class="string"&gt;&amp;quot;this is true&amp;quot;&lt;/span&gt;   &lt;span class="comment"&gt;; then expression
347 &lt;/span&gt;    &lt;span class="string"&gt;&amp;quot;this is false&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; else expression
348 &lt;/span&gt;&lt;span class="comment"&gt;; =&amp;gt; &amp;quot;this is true&amp;quot;
349 &lt;/span&gt;
350 &lt;span class="comment"&gt;;; In conditionals, all non-#f values are treated as true
351 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;member &amp;#x27;Groucho &amp;#x27;&lt;span class="paren2"&gt;(&lt;span class="default"&gt;Harpo Groucho Zeppo&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; &amp;#x27;(Groucho Zeppo)
352 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;if&lt;/span&gt;&lt;/i&gt; &lt;span class="paren2"&gt;(&lt;span class="default"&gt;member &amp;#x27;Groucho &amp;#x27;&lt;span class="paren3"&gt;(&lt;span class="default"&gt;Harpo Groucho Zeppo&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
353     &amp;#x27;yep
354     &amp;#x27;nope&lt;/span&gt;)&lt;/span&gt;
355 &lt;span class="comment"&gt;; =&amp;gt; &amp;#x27;yep
356 &lt;/span&gt;
357 &lt;span class="comment"&gt;;; `cond&amp;#x27; chains a series of tests to select a result
358 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;cond&lt;/span&gt;&lt;/i&gt; &lt;span class="paren2"&gt;[&lt;span class="default"&gt;&lt;span class="paren3"&gt;(&lt;span class="default"&gt;&amp;gt; 2 2&lt;/span&gt;)&lt;/span&gt; &lt;span class="paren3"&gt;(&lt;span class="default"&gt;error &lt;span class="string"&gt;&amp;quot;wrong!&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;]&lt;/span&gt;
359       &lt;span class="paren2"&gt;[&lt;span class="default"&gt;&lt;span class="paren3"&gt;(&lt;span class="default"&gt;&amp;lt; 2 2&lt;/span&gt;)&lt;/span&gt; &lt;span class="paren3"&gt;(&lt;span class="default"&gt;error &lt;span class="string"&gt;&amp;quot;wrong again!&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;]&lt;/span&gt;
360       &lt;span class="paren2"&gt;[&lt;span class="default"&gt;else &amp;#x27;ok&lt;/span&gt;]&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; &amp;#x27;ok
361 &lt;/span&gt;
362 &lt;span class="comment"&gt;;;; Pattern Matching
363 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;use-modules &lt;span class="paren2"&gt;(&lt;span class="default"&gt;ice-9 match&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; use match module
364 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; &lt;span class="paren2"&gt;(&lt;span class="default"&gt;fizzbuzz? n&lt;/span&gt;)&lt;/span&gt;
365   &lt;span class="paren2"&gt;(&lt;span class="default"&gt;match &lt;span class="paren3"&gt;(&lt;span class="default"&gt;list &lt;span class="paren4"&gt;(&lt;span class="default"&gt;remainder n 3&lt;/span&gt;)&lt;/span&gt; &lt;span class="paren4"&gt;(&lt;span class="default"&gt;remainder n 5&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
366     &lt;span class="paren3"&gt;(&lt;span class="default"&gt;&lt;span class="paren4"&gt;(&lt;span class="default"&gt;list 0 0&lt;/span&gt;)&lt;/span&gt; &amp;#x27;fizzbuzz&lt;/span&gt;)&lt;/span&gt;
367     &lt;span class="paren3"&gt;(&lt;span class="default"&gt;&lt;span class="paren4"&gt;(&lt;span class="default"&gt;list 0 _&lt;/span&gt;)&lt;/span&gt; &amp;#x27;fizz&lt;/span&gt;)&lt;/span&gt;
368     &lt;span class="paren3"&gt;(&lt;span class="default"&gt;&lt;span class="paren4"&gt;(&lt;span class="default"&gt;list _ 0&lt;/span&gt;)&lt;/span&gt; &amp;#x27;buzz&lt;/span&gt;)&lt;/span&gt;
369     &lt;span class="paren3"&gt;(&lt;span class="default"&gt;else #f&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
370
371 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;fizzbuzz? 15&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; &amp;#x27;fizzbuzz
372 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;fizzbuzz? 37&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; #f
373 &lt;/span&gt;
374 &lt;span class="comment"&gt;;;; Loops
375 &lt;/span&gt;
376 &lt;span class="comment"&gt;;; Looping can be done through (tail-) recursion
377 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; &lt;span class="paren2"&gt;(&lt;span class="default"&gt;lp i&lt;/span&gt;)&lt;/span&gt;
378   &lt;span class="paren2"&gt;(&lt;span class="default"&gt;when &lt;span class="paren3"&gt;(&lt;span class="default"&gt;&amp;lt; i 10&lt;/span&gt;)&lt;/span&gt;
379     &lt;span class="paren3"&gt;(&lt;span class="default"&gt;format #t &lt;span class="string"&gt;&amp;quot;i=~a&lt;/span&gt;&lt;span class="string"&gt;\n&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt; i&lt;/span&gt;)&lt;/span&gt;
380     &lt;span class="paren3"&gt;(&lt;span class="default"&gt;lp &lt;span class="paren4"&gt;(&lt;span class="default"&gt;1+ i&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
381 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;lp 5&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; i=5, i=6, ...
382 &lt;/span&gt;
383 &lt;span class="comment"&gt;;; Similarly, with a named let
384 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;let&lt;/span&gt;&lt;/i&gt; lp &lt;span class="paren2"&gt;(&lt;span class="default"&gt;&lt;span class="paren3"&gt;(&lt;span class="default"&gt;i 0&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
385   &lt;span class="paren2"&gt;(&lt;span class="default"&gt;when &lt;span class="paren3"&gt;(&lt;span class="default"&gt;&amp;lt; i 10&lt;/span&gt;)&lt;/span&gt;
386     &lt;span class="paren3"&gt;(&lt;span class="default"&gt;format #t &lt;span class="string"&gt;&amp;quot;i=~a&lt;/span&gt;&lt;span class="string"&gt;\n&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt; i&lt;/span&gt;)&lt;/span&gt;
387     &lt;span class="paren3"&gt;(&lt;span class="default"&gt;lp &lt;span class="paren4"&gt;(&lt;span class="default"&gt;1+ i&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; i=0, i=1, ...
388 &lt;/span&gt;
389 &lt;span class="comment"&gt;;; how to get a range? just like range(0, 9)?
390 &lt;/span&gt;&lt;span class="comment"&gt;;; the original &amp;#x27;iota&amp;#x27; only accept one para
391 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;iota 10&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; ==&amp;gt; (0 1 2 3 4 5 6 7 8 9)
392 &lt;/span&gt;&lt;span class="comment"&gt;;; the &amp;#x27;iota&amp;#x27; in srfi-1 was extended 
393 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;use-modules &lt;span class="paren2"&gt;(&lt;span class="default"&gt;srfi srfi-1&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
394 &lt;span class="comment"&gt;;; #&amp;lt;procedure iota (count #:optional start step)&amp;gt;
395 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;iota 5 10&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; (10 11 12 13 14) 
396 &lt;/span&gt;&lt;span class="comment"&gt;;; means from 10 count 5 times, each step +1 (plus one is default)
397 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;iota 5 10 2&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; (10 12 14 16 18)
398 &lt;/span&gt;&lt;span class="comment"&gt;;; from 10 count 5 times, each step +2
399 &lt;/span&gt;&lt;span class="comment"&gt;;; If you need a Python like range(5, 10) ==&amp;gt; (5 6 7 8 9), try:
400 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; &lt;span class="paren2"&gt;(&lt;span class="default"&gt;range from to&lt;/span&gt;)&lt;/span&gt; &lt;span class="paren2"&gt;(&lt;span class="default"&gt;map &lt;span class="paren3"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;lambda&lt;/span&gt;&lt;/i&gt; &lt;span class="paren4"&gt;(&lt;span class="default"&gt;x&lt;/span&gt;)&lt;/span&gt; &lt;span class="paren4"&gt;(&lt;span class="default"&gt;+ from x&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="paren3"&gt;(&lt;span class="default"&gt;iota &lt;span class="paren4"&gt;(&lt;span class="default"&gt;- to from&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
401 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;range 5 10&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; (5 6 7 8 9)
402 &lt;/span&gt;
403 &lt;span class="comment"&gt;;; how to do iteration?
404 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;for-each display &amp;#x27;&lt;span class="paren2"&gt;(&lt;span class="default"&gt;1 2 3 4 5&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
405 &lt;span class="comment"&gt;;; =&amp;gt; 12345
406 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;for-each &lt;span class="paren2"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;lambda&lt;/span&gt;&lt;/i&gt; &lt;span class="paren3"&gt;(&lt;span class="default"&gt;i&lt;/span&gt;)&lt;/span&gt; &lt;span class="paren3"&gt;(&lt;span class="default"&gt;format #t &lt;span class="string"&gt;&amp;quot;i=~a&lt;/span&gt;&lt;span class="string"&gt;\n&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt; i&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
407           &lt;span class="paren2"&gt;(&lt;span class="default"&gt;iota 10&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; i=0, i=1, ...
408 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;for-each &lt;span class="paren2"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;lambda&lt;/span&gt;&lt;/i&gt; &lt;span class="paren3"&gt;(&lt;span class="default"&gt;i&lt;/span&gt;)&lt;/span&gt; &lt;span class="paren3"&gt;(&lt;span class="default"&gt;format #t &lt;span class="string"&gt;&amp;quot;i=~a&lt;/span&gt;&lt;span class="string"&gt;\n&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt; i&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
409           &lt;span class="paren2"&gt;(&lt;span class="default"&gt;range 5 10&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; i=5, i=6, ...
410 &lt;/span&gt;
411 &lt;span class="comment"&gt;;;; Iteration Over Other Sequences
412 &lt;/span&gt;&lt;span class="comment"&gt;;; `for&amp;#x27; allows iteration over many other kinds of sequences:
413 &lt;/span&gt;&lt;span class="comment"&gt;;; lists, vectors, strings, sets, hash tables, etc...
414 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;for-each display &amp;#x27;&lt;span class="paren2"&gt;(&lt;span class="default"&gt;l i s t&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
415 &lt;span class="comment"&gt;;; =&amp;gt; list
416 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; vector-for-each &lt;span class="paren2"&gt;(&lt;span class="default"&gt;@ &lt;span class="paren3"&gt;(&lt;span class="default"&gt;rnrs&lt;/span&gt;)&lt;/span&gt; vector-for-each&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
417 &lt;span class="comment"&gt;;; export vector-for-each from rnrs only
418 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;vector-for-each display #&lt;span class="paren2"&gt;(&lt;span class="default"&gt;v e c t o r&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
419 &lt;span class="comment"&gt;;; =&amp;gt; vector
420 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;string-for-each display &lt;span class="string"&gt;&amp;quot;string&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
421 &lt;span class="comment"&gt;;; =&amp;gt; string
422 &lt;/span&gt;&lt;span class="comment"&gt;;;; More Complex Iterations
423 &lt;/span&gt;&lt;span class="comment"&gt;;; Parallel scan of multiple sequences (stops on shortest)
424 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;do &lt;span class="paren2"&gt;(&lt;span class="default"&gt;&lt;span class="paren3"&gt;(&lt;span class="default"&gt;i 10&lt;/span&gt;)&lt;/span&gt; &lt;span class="paren3"&gt;(&lt;span class="default"&gt;j &amp;#x27;&lt;span class="paren4"&gt;(&lt;span class="default"&gt;x y z&lt;/span&gt;)&lt;/span&gt; &lt;span class="paren4"&gt;(&lt;span class="default"&gt;cdr j&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; 
425     &lt;span class="paren2"&gt;(&lt;span class="default"&gt;&lt;span class="paren3"&gt;(&lt;span class="default"&gt;null? j&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; if j is &amp;#x27;(), just end the loop
426 &lt;/span&gt;  &lt;span class="paren2"&gt;(&lt;span class="default"&gt;format #t &lt;span class="string"&gt;&amp;quot;~a:~a&lt;/span&gt;&lt;span class="string"&gt;\n&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt; i &lt;span class="paren3"&gt;(&lt;span class="default"&gt;car j&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
427 &lt;span class="comment"&gt;; =&amp;gt; 0:x 1:y 2:z
428 &lt;/span&gt;
429 &lt;span class="comment"&gt;;;; Exceptions
430 &lt;/span&gt;
431 &lt;span class="comment"&gt;;; To catch exceptions, use the &amp;#x27;catch&amp;#x27; form
432 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;catch&lt;/span&gt;&lt;/i&gt; &amp;#x27;my-error 
433   &lt;span class="paren2"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;lambda&lt;/span&gt;&lt;/i&gt; &lt;span class="paren3"&gt;(&lt;span class="default"&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="paren3"&gt;(&lt;span class="default"&gt;error &amp;#x27;my-error&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
434   &lt;span class="paren2"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;lambda&lt;/span&gt;&lt;/i&gt; e &lt;span class="paren3"&gt;(&lt;span class="default"&gt;display &lt;span class="string"&gt;&amp;quot;my error&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
435
436 &lt;span class="comment"&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
437 &lt;/span&gt;&lt;span class="comment"&gt;;; 6. Mutation
438 &lt;/span&gt;&lt;span class="comment"&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
439 &lt;/span&gt;
440 &lt;span class="comment"&gt;;; Use `set!&amp;#x27; to assign a new value to an existing variable
441 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; n 5&lt;/span&gt;)&lt;/span&gt;
442 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;set! n &lt;span class="paren2"&gt;(&lt;span class="default"&gt;add1 n&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
443 n &lt;span class="comment"&gt;; =&amp;gt; 6
444 &lt;/span&gt;
445 &lt;span class="comment"&gt;;; Use fluid for explicitly mutable values
446 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; n* &lt;span class="paren2"&gt;(&lt;span class="default"&gt;make-fluid 5&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
447 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;fluid-set! n* &lt;span class="paren2"&gt;(&lt;span class="default"&gt;add1 &lt;span class="paren3"&gt;(&lt;span class="default"&gt;fluid-ref n*&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
448 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;fluid-ref n*&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; 6
449 &lt;/span&gt;
450 &lt;span class="comment"&gt;;; Many Guile datatypes are immutable (pairs, lists, etc), some come in
451 &lt;/span&gt;&lt;span class="comment"&gt;;; both mutable and immutable flavors (strings, vectors, hash tables,
452 &lt;/span&gt;&lt;span class="comment"&gt;;; etc...)
453 &lt;/span&gt;
454 &lt;span class="comment"&gt;;; Use `vector&amp;#x27; or `make-vector&amp;#x27; to create mutable vectors
455 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; vec &lt;span class="paren2"&gt;(&lt;span class="default"&gt;vector 2 2 3 4&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
456 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; wall &lt;span class="paren2"&gt;(&lt;span class="default"&gt;make-vector 100 &amp;#x27;bottle-of-beer&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
457 &lt;span class="comment"&gt;;; Use vector-set! to update a slot
458 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;vector-set! vec 0 1&lt;/span&gt;)&lt;/span&gt;
459 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;vector-set! wall 99 &amp;#x27;down&lt;/span&gt;)&lt;/span&gt;
460 vec &lt;span class="comment"&gt;; =&amp;gt; #(1 2 3 4)
461 &lt;/span&gt;
462 &lt;span class="comment"&gt;;; Create an empty mutable hash table and manipulate it
463 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; m3 &lt;span class="paren2"&gt;(&lt;span class="default"&gt;make-hash&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
464 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;hash-set! m3 &amp;#x27;a 1&lt;/span&gt;)&lt;/span&gt;
465 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;hash-set! m3 &amp;#x27;b 2&lt;/span&gt;)&lt;/span&gt;
466 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;hash-set! m3 &amp;#x27;c 3&lt;/span&gt;)&lt;/span&gt;
467 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;hash-ref m3 &amp;#x27;a&lt;/span&gt;)&lt;/span&gt;   &lt;span class="comment"&gt;; =&amp;gt; 1
468 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;hash-ref m3 &amp;#x27;d 0&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; =&amp;gt; 0
469 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;hash-remove! m3 &amp;#x27;a&lt;/span&gt;)&lt;/span&gt;
470
471 &lt;span class="comment"&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
472 &lt;/span&gt;&lt;span class="comment"&gt;;; 7. Modules
473 &lt;/span&gt;&lt;span class="comment"&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
474 &lt;/span&gt;
475 &lt;span class="comment"&gt;;; Modules let you organize code into multiple files and reusable
476 &lt;/span&gt;&lt;span class="comment"&gt;;; libraries; Make sure put all the module code in one file, since 
477 &lt;/span&gt;&lt;span class="comment"&gt;;; the modules split as files. And the module name should be same 
478 &lt;/span&gt;&lt;span class="comment"&gt;;; with the filename, say, module named (my-cake) is &amp;#x27;my-cake.scm&amp;#x27;,
479 &lt;/span&gt;&lt;span class="comment"&gt;;; and module named (mods my-cake) is &amp;#x27;mods/my-cake.scm&amp;#x27;,
480 &lt;/span&gt;&lt;span class="comment"&gt;;; (mods submods my-cake) ==&amp;gt; &amp;#x27;mods/submods/my-cake.scm&amp;#x27;.
481 &lt;/span&gt;&lt;span class="comment"&gt;;; ---begin my-cake.scm---
482 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define-module&lt;/span&gt;&lt;/i&gt; &lt;span class="paren2"&gt;(&lt;span class="default"&gt;my-cake&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; define a `cake&amp;#x27; module based on racket/base
483 &lt;/span&gt;  &lt;span class="keyword"&gt;#:use-modules&lt;/span&gt; &lt;span class="paren2"&gt;(&lt;span class="default"&gt;ice-9 format&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; the pre-requisition of current module
484 &lt;/span&gt;  &lt;span class="keyword"&gt;#:export&lt;/span&gt; &lt;span class="paren2"&gt;(&lt;span class="default"&gt;print-cake&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; function exported by the module
485 &lt;/span&gt;
486   &lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; &lt;span class="paren2"&gt;(&lt;span class="default"&gt;show fmt n ch&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; internal function
487 &lt;/span&gt;    &lt;span class="paren2"&gt;(&lt;span class="default"&gt;format #t fmt &lt;span class="paren3"&gt;(&lt;span class="default"&gt;make-string n ch&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
488     &lt;span class="paren2"&gt;(&lt;span class="default"&gt;newline&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;)
489
490   &lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; &lt;span class="paren2"&gt;(&lt;span class="default"&gt;print-cake n&lt;/span&gt;)&lt;/span&gt;
491     &lt;span class="paren2"&gt;(&lt;span class="default"&gt;show &lt;span class="string"&gt;&amp;quot;   ~a   &amp;quot;&lt;/span&gt; n &lt;span class="character"&gt;#\.&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
492     &lt;span class="paren2"&gt;(&lt;span class="default"&gt;show &lt;span class="string"&gt;&amp;quot; .-~a-. &amp;quot;&lt;/span&gt; n &lt;span class="character"&gt;#\|&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
493     &lt;span class="paren2"&gt;(&lt;span class="default"&gt;show &lt;span class="string"&gt;&amp;quot; | ~a | &amp;quot;&lt;/span&gt; n &lt;span class="character"&gt;#\space&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
494     &lt;span class="paren2"&gt;(&lt;span class="default"&gt;show &lt;span class="string"&gt;&amp;quot;---~a---&amp;quot;&lt;/span&gt; n &lt;span class="character"&gt;#\-&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
495 &lt;span class="comment"&gt;;; --end my-cake.scm---
496 &lt;/span&gt;
497 &lt;span class="comment"&gt;;; Be sure that the path of &amp;#x27;my-cake.scm&amp;#x27; is in your current 
498 &lt;/span&gt;&lt;span class="comment"&gt;;; %load-path list. Use `use-modules&amp;#x27; to get all `provide&amp;#x27;d names 
499 &lt;/span&gt;&lt;span class="comment"&gt;;; from a module.
500 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;use-modules &lt;span class="paren2"&gt;(&lt;span class="default"&gt;my-cake&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; the &amp;#x27; is for a local submodule
501 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;print-cake 3&lt;/span&gt;)&lt;/span&gt;
502 &lt;span class="comment"&gt;; (show &amp;quot;~a&amp;quot; 1 #\A) ; =&amp;gt; error, `show&amp;#x27; was not exported
503 &lt;/span&gt;
504 &lt;span class="comment"&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
505 &lt;/span&gt;&lt;span class="comment"&gt;;; 8. Classes and Objects
506 &lt;/span&gt;&lt;span class="comment"&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
507 &lt;/span&gt;&lt;span class="comment"&gt;;; TODO
508 &lt;/span&gt;&lt;span class="comment"&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
509 &lt;/span&gt;&lt;span class="comment"&gt;;; 9. Macros
510 &lt;/span&gt;&lt;span class="comment"&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
511 &lt;/span&gt;
512 &lt;span class="comment"&gt;;; Macros let you extend the syntax of the language
513 &lt;/span&gt;
514 &lt;span class="comment"&gt;;; Let&amp;#x27;s add a while loop
515 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define-syntax-rule&lt;/span&gt;&lt;/i&gt; &lt;span class="paren2"&gt;(&lt;span class="default"&gt;while condition body ...&lt;/span&gt;)&lt;/span&gt;
516   &lt;span class="paren2"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;let&lt;/span&gt;&lt;/i&gt; &lt;i&gt;&lt;span class="symbol"&gt;loop&lt;/span&gt;&lt;/i&gt; &lt;span class="paren3"&gt;(&lt;span class="default"&gt;&lt;/span&gt;)&lt;/span&gt;
517     &lt;span class="paren3"&gt;(&lt;span class="default"&gt;when condition
518       body ...
519       &lt;span class="paren4"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;loop&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
520
521 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;let&lt;/span&gt;&lt;/i&gt; &lt;span class="paren2"&gt;(&lt;span class="default"&gt;&lt;span class="paren3"&gt;[&lt;span class="default"&gt;i 0&lt;/span&gt;]&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
522   &lt;span class="paren2"&gt;(&lt;span class="default"&gt;while &lt;span class="paren3"&gt;(&lt;span class="default"&gt;&amp;lt; i  10&lt;/span&gt;)&lt;/span&gt;
523     &lt;span class="paren3"&gt;(&lt;span class="default"&gt;displayln i&lt;/span&gt;)&lt;/span&gt;
524     &lt;span class="paren3"&gt;(&lt;span class="default"&gt;set! i &lt;span class="paren4"&gt;(&lt;span class="default"&gt;add1 i&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
525
526 &lt;span class="comment"&gt;;; Macros are hygienic, you cannot clobber existing variables!
527 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define-syntax-rule&lt;/span&gt;&lt;/i&gt; &lt;span class="paren2"&gt;(&lt;span class="default"&gt;swap! x y&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; -! is idomatic for mutation
528 &lt;/span&gt;  &lt;span class="paren2"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;let&lt;/span&gt;&lt;/i&gt; &lt;span class="paren3"&gt;(&lt;span class="default"&gt;&lt;span class="paren4"&gt;(&lt;span class="default"&gt;tmp x&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
529     &lt;span class="paren3"&gt;(&lt;span class="default"&gt;set! x y&lt;/span&gt;)&lt;/span&gt;
530     &lt;span class="paren3"&gt;(&lt;span class="default"&gt;set! y tmp&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
531
532 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; tmp 1&lt;/span&gt;)&lt;/span&gt;
533 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; a 2&lt;/span&gt;)&lt;/span&gt;
534 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define&lt;/span&gt;&lt;/i&gt; b 3&lt;/span&gt;)&lt;/span&gt;
535 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;swap! a b&lt;/span&gt;)&lt;/span&gt;
536 &lt;span class="paren1"&gt;(&lt;span class="default"&gt;format #t &lt;span class="string"&gt;&amp;quot;tmp = ~a; a = ~a; b = ~a&lt;/span&gt;&lt;span class="string"&gt;\n&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;&lt;/span&gt; tmp a b&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; tmp is unaffected
537 &lt;/span&gt;
538 &lt;span class="comment"&gt;;; But they are still code transformations, for example:
539 &lt;/span&gt;&lt;span class="paren1"&gt;(&lt;span class="default"&gt;&lt;i&gt;&lt;span class="symbol"&gt;define-syntax-rule&lt;/span&gt;&lt;/i&gt; &lt;span class="paren2"&gt;(&lt;span class="default"&gt;bad-while condition body ...&lt;/span&gt;)&lt;/span&gt;
540   &lt;span class="paren2"&gt;(&lt;span class="default"&gt;when condition
541     body ...
542     &lt;span class="paren3"&gt;(&lt;span class="default"&gt;bad-while condition body ...&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;
543 &lt;span class="comment"&gt;;; this macro is broken: it generates infinite code, if you try to use
544 &lt;/span&gt;&lt;span class="comment"&gt;;; it, the compiler will get in an infinite loop
545 &lt;/span&gt;&lt;/tt&gt;&lt;/pre&gt;
546 &lt;p&gt;Please read &lt;a href="http://mitpress.mit.edu/sicp/full-text/book/book.html" class="external"&gt;SICP&lt;/a&gt; for more profound learning.&lt;/p&gt;
547 &lt;p&gt;Happy Hacking!&lt;/p&gt;</content>
548     <id>tag:web-artanis.com,2013-07-24:/scheme.html</id>
549     <published>2013-07-24T08:01:27Z</published>
550     <title type="text">Learn Scheme in 15 minutes</title>
551     <updated>2013-07-24T08:01:27Z</updated>
552     <link href="www.web-artanis.com/scheme.html" rel="alternate" type="application/xhtml+xml" />
553   </entry>
554 </feed>