summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--books/Little Schemer3
-rw-r--r--books/Seasoned Schemer53
-rw-r--r--software/scheme6
3 files changed, 62 insertions, 0 deletions
diff --git a/books/Little Schemer b/books/Little Schemer
index ccca2a7..394de5b 100644
--- a/books/Little Schemer
+++ b/books/Little Schemer
@@ -17,6 +17,9 @@ The first 7 chapters were very straight forward, the end of chapter 8 took
some more thought and I'm not sure how happy I am with the description of
collectors and continuations.
+For a better description of the Y-combinator, see these `course notes
+<http://dangermouse.brynmawr.edu/cs245/ycomb_jim.html>`__.
+
This book is followed by `The Seasoned Schemer </k/books/seasonedschemer/>`__
and The Reasoned Schemer.
diff --git a/books/Seasoned Schemer b/books/Seasoned Schemer
new file mode 100644
index 0000000..ed2a3fb
--- /dev/null
+++ b/books/Seasoned Schemer
@@ -0,0 +1,53 @@
+============================
+The Seasoned Schemer
+============================
+
+:by: Daniel Friedman and Matthias Felleisen
+:Edition: First (1st)
+
+See also `Scheme </k/software/scheme/>`__.
+
+This book is a sequel `The Little Schemer`_;
+The Reasoned Schemer is a paralel exploration of logical programming.
+
+.. _The Little Schemer: /k/books/littleschemer/
+
+Issues/Omissions
+--------------------------
+The Y combinator function is never defined in this book, I had to copy it out of
+`The Little Schemer`_;
+
+ (define Y
+ (lambda (thing)
+ ((lambda (le)
+ ((lambda (f) (f f))
+ (lambda (f) (le (lambda (x) ((f f) x))))))
+ thing)))
+
+MIT/GNU Scheme doesn't seem to have ``letcc`` or ``try``; I stuck with
+``call-with-current-continuation``:
+
+ (call-with-current-continuation (lambda (hook) ...)
+ ; is the same as
+ (letcc hook (...))
+
+ ; as noted in the book (p. 89)
+ (try x a b)
+ ; is the same as
+ (letcc success
+ (letcc x
+ (success a))
+ b)
+ ; is the same as
+ (call-with-current-continuation
+ (lambda (success)
+ (begin
+ (call-with-current-continuation
+ (lambda (x)
+ (success a)))
+ b)))
+
+
+The Next 10 Commandments
+--------------------------
+TODO
diff --git a/software/scheme b/software/scheme
index ad2c5b5..258343b 100644
--- a/software/scheme
+++ b/software/scheme
@@ -59,3 +59,9 @@ C-x u Undo
C-y Paste
========= ====================================================================
+Scope
+--------------
+
+``set!`` looks up a symbol name and permanently changes the first value it comes
+across. ``let`` (and ``letrec``) create a new symbol with the given value.
+But wait, you need a ``lambda`` block to make everything work?