name change
[lambda.git] / learning_scheme.mdwn
1 *   [Try Scheme in your browser](http://tryscheme.sourceforge.net/) (slow, bare-bones)
2 *   This site's guide to [[Installing Scheme|/installing#scheme]]
3 *   This site's [[entry-level explanation of the differences between Scheme, OCaml, and Haskell|rosetta1]]
4 *   A bit about comments and brackets is available [[here|/rosetta2]]; and then more details about how to do some OCaml-ish and Haskell-ish things in Scheme, and how to get Scheme-ish continuations in OCaml, are [[here|/rosetta3]]
5
6
7 <!-- -->
8 *   Wikipedia on
9 [Lisp](http://en.wikipedia.org/wiki/Lisp_%28programming_language%29),
10 [Scheme](http://en.wikipedia.org/wiki/Scheme_%28programming_language%29),
11 [Racket](http://en.wikipedia.org/wiki/Racket_%28programming_language%29), and
12 [Chicken](http://en.wikipedia.org/wiki/CHICKEN_%28Scheme_implementation%29)
13
14
15 ## Tutorials ##
16
17 *   [Welcome to Racket](http://docs.racket-lang.org/guide/intro.html#%28part._.Interacting_with_.Racket%29) from Racket Guide
18 *   Chicken [Getting started](http://wiki.call-cc.org/man/4/Getting%20started)
19
20 If you are new to programming or if you have the patience to do so, you should work through a textbook:
21
22 *   a recommended text available online is [Teach Yourself Scheme in Fixnum Days](http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html)
23 *   the *Little Schemer* book(s) we recommended for the seminar are good introductions, requiring more commitment
24 *   [How to Design Programs](http://www.ccs.neu.edu/home/matthias/HtDP2e/) (HtDP),
25 by Matthias Felleisen, et al., is another good choice, which the Racket group recommends  
26 (the [1st ed](http://htdp.org/2003-09-26/Book/) <!-- go up a level for solutions, extra problems, errata -->
27 is also available, and covers some additional topics like mutation; whenever the book says "Scheme," you can read it as "Racket")
28
29 If you're already a programmer and you're in more of a hurry:
30
31 *   you could look at the [Quick Introduction to Racket](http://docs.racket-lang.org/quick/index.html), which uses DrRacket and a picture-drawing library
32 *   or [An Introduction to Lambda Calculus and Scheme](http://www.jetcafe.org/~jim/lambda.html)
33
34
35
36 ## Advanced Racket Docs ##
37
38 *   [Racket Guide](http://docs.racket-lang.org/guide/index.html) starts with a tutorial, then describes the rest of the Racket language. Intended for programmers who are new to (at least some part of) Racket. If you are new to programming, you should instead start with one of the textbooks listed above. Describes parts of the Racket language that go beyond the learning-oriented fragments of HtDP.
39 *   [Racket Reference](http://docs.racket-lang.org/reference/index.html) defines the core Racket language and its most prominent libraries. Less friendly than Racket Guide, but more precise and complete.
40 *   <form action="http://docs.racket-lang.org/search/index.html" method="get">
41 Racket API Search: <input type="text" name="q" /> |
42 racket/[help](http://docs.racket-lang.org/reference/Interactive_Help.html)
43 </form>
44 *   [#lang r5rs](http://docs.racket-lang.org/r5rs/index.html), `'cons` expresses `mcons`
45 *   [#lang r6rs](http://docs.racket-lang.org/r6rs/index.html) or #!r6rs
46 *   Supported [SRFIs](http://docs.racket-lang.org/srfi/index.html)
47 *   [Libraries and collections](http://docs.racket-lang.org/reference/collects.html)
48 *   [(require data)](http://docs.racket-lang.org/data/index.html)
49 *   [(require math)](http://docs.racket-lang.org/math/index.html)
50 *   racket/[enter and rerequire](http://docs.racket-lang.org/reference/interactive.html)
51 *   [Debugging](http://docs.racket-lang.org/reference/debugging.html) |
52 the [Stepper](http://docs.racket-lang.org/stepper/index.html)
53 *   [Deploying](http://docs.racket-lang.org/guide/running.html)
54 *   [raco](http://docs.racket-lang.org/raco/index.html) cmdline tool
55
56 <!-- -->
57 *   Macros in [Guide](http://docs.racket-lang.org/guide/macros.html) |
58 [Reference](http://docs.racket-lang.org/reference/Macros.html)
59 *   [Macro debugger](http://docs.racket-lang.org/macro-debugger/index.html)
60
61
62 <!-- -->
63 *   Racket: [latest release](http://download.racket-lang.org/) |
64 [blog](http://blog.racket-lang.org/) |
65 [wiki](https://github.com/plt/racket/wiki)
66 *   [Style guidelines](http://docs.racket-lang.org/style/index.html) <!-- "How to Program Racket" -->
67 *   [raco pkg](http://docs.racket-lang.org/pkg/) package manager |
68 [repository](http://pkgs.racket-lang.org/#)
69 *   Racket [source](https://github.com/plt/racket/) |
70 [bugs](http://bugs.racket-lang.org/)
71
72 <!-- -->
73 *   [[Extending Racket]] <!-- this site -->
74 *   Typed Racket [Guide](http://docs.racket-lang.org/ts-guide/index.html) |
75 [Reference](http://docs.racket-lang.org/ts-reference/index.html)
76 *   [Lazy Racket](http://docs.racket-lang.org/lazy/index.html)
77 *   [PLT Redex](http://redex.racket-lang.org/), for specifying and testing operational semantics
78
79
80 ## Advanced Chicken Docs ##
81
82 *   [(declare (uses *unit*)) vs (include "*path*")](http://wiki.call-cc.org/man/4/Basic%20mode%20of%20operation)
83 *   Using [csi](http://wiki.call-cc.org/man/4/Using%20the%20interpreter) |
84 [csc](http://wiki.call-cc.org/man/4/Using%20the%20compiler) |
85 [deploying](http://wiki.call-cc.org/man/4/Deployment)
86 *   Supported [language](http://wiki.call-cc.org/man/4/Supported%20language) |
87 [standards](http://wiki.call-cc.org/supported-standards)
88 *   <form action="http://api.call-cc.org/cdoc" method="get">
89 Chicken API Search:
90 <a href="">Chickadee</a> <input name="q" type="text" />
91 <input type="submit" name="query-name" hidden value="Look+up" />
92 <input type="submit" name="query-regex" value="regex" />
93 </form>
94 *   [FAQ](http://wiki.call-cc.org/man/4/faq)
95 *   Chicken [development](http://code.call-cc.org/#development) |
96 [process](http://wiki.call-cc.org/development-process) |
97 [bugs](http://bugs.call-cc.org/)
98
99
100 <!-- -->
101 *   [chicken-setup](http://manpages.ubuntu.com/manpages/karmic/man1/chicken-setup.1.html)
102 *   [chicken-install](http://manpages.ubuntu.com/manpages/utopic/en/man1/chicken-install.1.html)
103 *   Eggs: [managing](http://wiki.call-cc.org/eggs) |
104 [authoring](http://wiki.call-cc.org/eggs%20tutorial)
105 ([more](http://wiki.call-cc.org/man/4/Extensions)) |
106 [repository](http://wiki.call-cc.org/chicken-projects/egg-index-4.html)
107 *   [Distributed egg repos](http://wiki.call-cc.org/distributed-egg-repos)
108 *   Tutorial on writing eggs: [1](http://shisaa.jp/postset/chicken-scheme-1.html) [2](http://shisaa.jp/postset/chicken-scheme-2.html) [3](http://shisaa.jp/postset/chicken-scheme-3.html)
109 *   [Data model](http://wiki.call-cc.org/man/4/Data%20representation) |
110 [internals](http://wiki.call-cc.org/Internals) |
111 [FFI](http://wiki.call-cc.org/man/4/Interface%20to%20external%20functions%20and%20variables)
112
113
114
115 ## Other Scheme Links ##
116
117 The Scheme language is standardized; the various implementations of the language usually adhere to what's published in the current standard and add on
118 different handy extensions. The first standard was published in 1975. A revision was published a few years later called "The revised report on Scheme, a
119 dialect of Lisp." Thereafter, revisions of the standard were titled "The Revised Revised Report..." and so on, or "The Revised^n Report..." for
120 short. One widely implemented standard is
121 [The Revised^5 Report on Scheme](http://www.schemers.org/Documents/Standards/R5RS/HTML/),
122 or R5RS, published in 1998. Another standard
123 [R6RS](http://www.r6rs.org/final/html/r6rs/r6rs.html)
124 ([libraries](http://www.r6rs.org/final/html/r6rs-lib/r6rs-lib.html))
125 was ratified in 2007, but had many detractors and wasn't fully accepted in the community. Currently Scheme is being split into a lean minimal base, now ratified as
126 [R7RS-small](http://trac.sacrideo.us/wg/raw-attachment/wiki/WikiStart/r7rs.pdf)
127 ([errata](http://trac.sacrideo.us/wg/wiki/R7RSSmallErrata)),
128 and a richer language
129 [R7RS-large](http://www.scheme-reports.org/2015/working-group-2.html)
130 (still being designed) that standardizes many add-ons.
131
132 *   [Scheme FAQ](http://community.schemewiki.org/?scheme-faq)
133 *   [Scheme Requests for Implementation](http://srfi.schemers.org/) (SRFIs)
134
135
136 <!-- -->
137 *   [The Scheme Programming Language](http://scheme.com/tspl4/)/4ed, by R. Kent Dybvig ([errata](http://scheme.com/tspl4-errata.html))
138 *   [Structure and Interpretation of Computer Programs](http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-4.html)/2ed (SICP)
139 *   [Programming Languages: Application and Interpretation](http://cs.brown.edu/courses/cs173/2012/book/)/2ed
140
141 <!-- -->
142 *   [The Adventures of a Pythonista in Schemeland](http://www.phyast.pitt.edu/~micheles/scheme/index.html)
143 *   [Comparing Chicken to C, Python, and Perl](http://wiki.call-cc.org/language-comparison)
144 *   [Chicken for Pythonistas](http://wiki.call-cc.org/chicken-for-python-programmers)
145 *   [Haskell vs Scheme](http://www.reddit.com/r/programming/comments/nq1k/haskell_and_scheme_which_one_and_why/)
146
147 <!-- -->
148 *   Chicken [Tips and tricks](http://wiki.call-cc.org/tips%20and%20tricks)
149 *   The [Schematics Scheme Cookbook](http://schemecookbook.org/) is a collaborative effort to produce documentation and recipes for using Scheme for common tasks.
150 *   [Stack Overflow](http://stackoverflow.com/questions/tagged/scheme?sort=faq) questions tagged "scheme"
151 *   [Scheme Wiki](http://community.schemewiki.org/)
152 *   [Documents at Schemers.org](http://www.schemers.org/Documents/)
153
154
155
156
157
158 <!--
159 Scheme is a very small language which is based on Lisp, the oldest of functional programming languages. Scheme's main advantages are elegance (the entire language can be built on top of a handful of primitive list manipulating operations), and the enormous corpus of educational material which has been created for it. As such, Scheme is the perfect place to start learning the techniques of functional abstraction. If you decide to study Scheme, you should make sure you that your path through the available material brings you into contact with all of the following (in no particular order):
160
161     recursion (vs. iteration)
162     bottom-up design
163     first-class functions <http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html>
164     lambda functions
165     closures
166     continuations
167     macros
168
169 An excellent place to start is the book: Structure and Interpretation of Computer Programs (considered by some the "bible" of functional programming, which may give a false implication as to its breadth, despite it being a very good book). There are also countless other great books and websites which have been published to answer questions on how to learn Lisp, why to learn Lisp, etc., so searching the web will most certainly be worth your time.
170 -->
171
172 <!--
173 [Racket and vim](http://docs.racket-lang.org/guide/Vim.html)
174 [Chicken and vim](http://wiki.call-cc.org/vim)
175 -->