diff options
-rw-r--r-- | books/Little Schemer | 3 | ||||
-rw-r--r-- | books/Seasoned Schemer | 53 | ||||
-rw-r--r-- | software/scheme | 6 |
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? |