X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=offsite_reading.mdwn;h=e0e1617ba47d4a3c46c6b2ddb555ca1d859400da;hb=eae3c74f423d855b5f3a282af2c68d2bf222172f;hp=403e99e6610b8012eb8ab8ea9deaaa423f76851c;hpb=74a8765899b196b26551024731abaeaccd87b6d9;p=lambda.git diff --git a/offsite_reading.mdwn b/offsite_reading.mdwn index 403e99e6..e0e1617b 100644 --- a/offsite_reading.mdwn +++ b/offsite_reading.mdwn @@ -1,4 +1,4 @@ -Many off these links are to Wikipedia. You can learn a lot from such articles, +Many of these links are to Wikipedia. You can learn a lot from such articles, so long as you remember they may sometimes mislead or make mistakes. However, I hope at this point in your education you'll have learned to be a guarded reader even of authoritative treatises by eminent authors. So you shouldn't need any @@ -12,26 +12,13 @@ first encountering. Or perhaps several of these at once. We hope you will already have mastered the skill of leveraged reading: getting what you can out of an article you don't fully understand, so that you can discuss it with the rest of the group and hopefully get to a point where you can read it again and -get more out of out. (Rinse and repeat.) +get more out of. (Rinse and repeat.) - -## General issues about variables and binding in programming languages ## - -* [[!wikipedia Variable (programming)]] -* [[!wikipedia Variable shadowing]] -* [[!wikipedia Scope (programming)]] -* [[!wikipedia Free variables and bound variables]] -* [[!wikipedia Name binding]] -* [[!wikipedia Name resolution]] -* [[!wikipedia Parameter (computer science)]] - -## Functions as values, etc ## +## Functions ## * [[!wikipedia Higher-order function]] * [[!wikipedia First-class function]] -* [[!wikipedia Closure (computer science)]] * [[!wikipedia Currying]] -* [[!wikipedia Recursion (computer science)]] ## Functional vs imperative programming ## @@ -39,112 +26,181 @@ get more out of out. (Rinse and repeat.) * [[!wikipedia Functional programming]] * [[!wikipedia Purely functional]] * [[!wikipedia Referential transparency (computer science)]] +* [[!wikipedia Side effect (computer science) desc="Side effects"]] * [[!wikipedia Imperative programming]] +## General issues about variables and scope in programming languages ## + +* [[!wikipedia Variable (programming) desc="Variables"]] +* [[!wikipedia Free variables and bound variables]] +* [[!wikipedia Variable shadowing]] +* [[!wikipedia Name binding]] +* [[!wikipedia Name resolution]] +* [[!wikipedia Parameter (computer science) desc="Function parameters"]] +* [[!wikipedia Scope (programming) desc="Variable scope"]] +* [[!wikipedia Closure (computer science) desc="Closures"]] + +##[[Learning Scheme]]## + ## Untyped lambda calculus and combinatory logic ## * [[!wikipedia Lambda calculus]] -* [Chris Barker's Lambda Tutorial](http://homepages.nyu.edu/~cb125/Lambda) -* [Lambda Animator](http://thyer.name/lambda-animator/)
-* [[!wikipedia Haskell Curry]] + * [[!wikipedia Moses Schönfinkel]] +* [[!wikipedia Haskell Curry]] * [[!wikipedia Alonzo Church]]
+* [[!wikipedia Church encoding]] + * [[!wikipedia Combinatory logic]] * [Combinatory logic](http://plato.stanford.edu/entries/logic-combinatory/) at the Stanford Encyclopedia of Philosophy -* [[!wikipedia SKI combinatory calculus]]
+* [[!wikipedia SKI combinatory calculus]] * [[!wikipedia B,C,K,W system]] -* [[!wikipedia Church-Rosser theorem]] -* [[!wikipedia Normalization property]] -* [[!wikipedia Turing completeness]]
-* [Scooping the Loop Snooper](http://www.cl.cam.ac.uk/teaching/0910/CompTheory/scooping.pdf), a proof of the undecidability of the halting problem in the style of Dr Seuss by Geoffrey K. Pullum
-* [[!wikipedia Church encoding]]
-
-## Learning Scheme ##
-
-* [Wikipedia overview of Scheme](http://en.wikipedia.org/wiki/Scheme_%28programming_language%29)
+* Jeroen Fokker, "The Systematic Construction of a One-combinator Basis for Lambda-Terms" Formal Aspects of Computing 4 (1992), pp. 776-780.
+
-* If you are new to programming or if you have the patience to work through a textbook, you should work through a textbook. Some good choices are The Little Schemer book(s) we recommended for the seminar; and also:
+* [To Dissect a Mockingbird](http://dkeenan.com/Lambda/index.htm)
+* [Combinator Birds](http://www.angelfire.com/tx4/cus/combinator/birds.html)
+* [Les deux combinateurs et la totalite](http://www.paulbraffort.net/j_et_i/j_et_i.html) by Paul Braffort.
- + [How to Design Programs](http://www.htdp.org/2003-09-26/), by Matthias Felleisen, et al., which the Racket groups recommends. Whenever the book says "Scheme," you can read it as "Racket."
-
- Another warmly-recommended introduction available online is:
-
- + [Teach Yourself Scheme in Fixnum Days](http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html)
-
-* If you're already a programmer and you're in more of a hurry, you could instead look at the [Quick Introduction to Racket](http://docs.racket-lang.org/quick/index.html). This tutorial provides a brief introduction to the Racket programming language by using DrRacket and one of Racket's picture-drawing libraries.
-
-* [An Introduction to Lambda Calculus and Scheme](http://www.jetcafe.org/~jim/lambda.html) is also aimed at programmers.
-
-* After any of the preceding, you could move on to [Racket Guide](http://docs.racket-lang.org/guide/index.html). This starts with a tutorial on Racket basics; then it describes the rest of the Racket language. This guide is intended for programmers who are new to Racket or new to some part of Racket. It assumes programming experience, so if you are new to programming, you should instead start with one of the textbooks listed above. This Guide describes parts of the Racket language which go beyond the learning-oriented fragments of How to Design Programs.
-
-* The [Complete Racket Reference Manual](http://docs.racket-lang.org/reference/index.html) defines the core Racket language and describes its most prominent libraries. The Racket Guide is friendlier; though less precise and less complete.
+## Evaluation Order ##
-* The Scheme language is standardized; the various implementations of the
-language usually adhere to what's published in the current standard and add on
-different handy extensions. The first standard was published in 1975. A
-revision was published in 1978 called "The revised report on Scheme, a
-dialect of Lisp." Thereafter, revisions of the standard were titled "The
-Revised Revised Report..." and so on, or "The Revised^n Report..." for
-short, for increasing n. The most widely implemented standard is [The
-Revised^5 Report on Scheme](http://docs.racket-lang.org/r5rs/index.html),
-or R5RS, published in 1998.
-\[ [Alt link](http://www.schemers.org/Documents/Standards/R5RS/HTML/) \]
-A new standard [R6RS](http://docs.racket-lang.org/r6rs/index.html) was ratified
-in 2007, but this has many detractors and has not been fully accepted in the
-community.
-\[ [Alt link](http://www.r6rs.org/final/html/r6rs/r6rs.html);
-[Libraries](http://www.r6rs.org/final/html/r6rs-lib/r6rs-lib.html) \]
+* [[!wikipedia Evaluation strategy]]
+* [[!wikipedia Eager evaluation]]
+* [[!wikipedia Lazy evaluation]]
+* [[!wikipedia Strict programming language]]
-* [Scheme FAQ](http://community.schemewiki.org/?scheme-faq)
+## Confluence, Normalization, Undecidability ##
-* [Scheme Requests for Implementation](http://srfi.schemers.org/) (SRFI)
+* [[!wikipedia Church-Rosser theorem]]
+* [[!wikipedia Normalization property]]
+* [[!wikipedia Turing completeness]]
+* [Scooping the Loop Snooper](http://www.cl.cam.ac.uk/teaching/0910/CompTheory/scooping.pdf), a proof of the undecidability of the halting problem in the style of Dr Seuss by Geoffrey K. Pullum
-* The [Schematics Scheme Cookbook](http://schemecookbook.org/) is a collaborative effort to produce documentation and recipes for using Scheme for common tasks.
-
## Recursion and the Y Combinator ##
+* [[!wikipedia Recursion (computer science) desc="Recursion"]]
* [[!wikipedia Y combinator]]
* [Chapter 9 from The Little Schemer](http://www.ccs.neu.edu/home/matthias/BTLS/sample.ps) on the Y Combinator "...and Again, and Again, and Again..."
* [The Y combinator](http://mvanier.livejournal.com/2700.html)
+* [The Why of Y](http://www.dreamsongs.com/NewFiles/WhyOfY.pdf)
* [The Y Combinator (Slight Return), or: How to Succeed at Recursion Without Really Recursing](http://mvanier.livejournal.com/2897.html)
* [Y Combinator for Dysfunctional Non-Schemers](http://rayfd.wordpress.com/2007/05/06/y-combinator-for-dysfunctional-non-schemers/)
* [The Y Combinator](http://www.ece.uc.edu/~franco/C511/html/Scheme/ycomb.html)
-* [The Y Combinator](http://dangermouse.brynmawr.edu/cs245/ycomb_jim.html), described as:
- > This is the derivation of the applicative-order Y-combinator from scratch, in Scheme. The following derivation is similar in flavor to the derivation found in The Little LISPer by Friedman/Felleisen, but uses a slightly different starting approach...
+* [The Y Combinator](http://dangermouse.brynmawr.edu/cs245/ycomb_jim.html) derives the applicative-order Y-combinator from scratch, in Scheme. This derivation is similar in flavor to the derivation found in The Little Schemer, but uses a slightly different starting approach...
+* [The church of the least fixed point, by Sans Pareil](http://www.springerlink.com/content/n4t2v573m58g2755/)
-## Evaluation Order ##
+## Folds ##
-* [[!wikipedia Evaluation strategy]]
-* [[!wikipedia Eager evaluation]]
-* [[!wikipedia Lazy evaluation]]
-* [[!wikipedia Strict programming language]]
+* [[!wikipedia Fold (higher-order function)]]
## Types ##
-* [[!wikipedia Tagged union]]
-* [[!wikipedia Algebraic data type]]
-* [[!wikipedia Pattern matching]]
-* [[!wikipedia Unit type]]
-* [[!wikipedia Bottom type]]
* [[!wikipedia Typed lambda calculus]]
* [[!wikipedia Simply typed lambda calculus]]
* [Type Theory](http://plato.stanford.edu/entries/type-theory/) at the Stanford Encyclopedia of Philosophy
* [Church's Type Theory](http://plato.stanford.edu/entries/type-theory-church/) at the Stanford Encyclopedia of Philosophy
-* The [[!wikipedia Curry-Howard isomorphism]]
* [[!wikipedia Type polymorphism]]
* [[!wikipedia System F]]
+
+* [[!wikipedia Tagged union]]
+* [[!wikipedia Algebraic data type]]
+* [[!wikipedia Recursive data type]]
+* [[!wikipedia Pattern matching]]
+* [[!wikipedia Unit type]]
+* [[!wikipedia Bottom type]]
+
+
+##[[Learning OCaml]]##
+
-## Learning OCaml ##
+## Monads ##
+* [[!wikipedia Monad (functional programming) desc="Monads in Functional Programming"]]
+* [Daniel Friedman. A Schemer's View of Monads](/schemersviewofmonads.ps): from
+* [Research Papers/Monads and Arrows](http://www.haskell.org/haskellwiki/Research_papers/Monads_and_arrows)
+* [Eugenio Moggi, Notions of Computation and Monads](http://www.disi.unige.it/person/MoggiE/ftp/ic91.pdf): Information and Computation 93 (1) 1991.
+* [Philip Wadler. The essence of functional programming](http://homepages.inf.ed.ac.uk/wadler/papers/essence/essence.ps):
+invited talk, *19'th Symposium on Principles of Programming Languages*, ACM Press, Albuquerque, January 1992.
+
+* [Philip Wadler. Monads for Functional Programming](http://homepages.inf.ed.ac.uk/wadler/papers/marktoberdorf/baastad.pdf):
+in M. Broy, editor, *Marktoberdorf Summer School on Program Design Calculi*, Springer Verlag, NATO ASI Series F: Computer and systems sciences, Volume 118, August 1992. Also in J. Jeuring and E. Meijer, editors, *Advanced Functional Programming*, Springer Verlag, LNCS 925, 1995. Some errata fixed August 2001.
+
+* Ken Shan [Monads for natural language semantics](http://arxiv.org/abs/cs/0205026v1) (2001) uses reader monad to implement intensionality.
+* Ben-Avi and Winter [A modular approach to intensionality](http://parles.upf.es/glif/pub/sub11/individual/bena_wint.pdf) (2007) reinvents the technique.
+
+* Monsters and context-shifting, e.g. Gillies/von Fintel on "ifs" [not sure which paper]
+
+
+## Monads in Category Theory ##
+
+* [Category Theory at SEP](http://plato.stanford.edu/entries/category-theory/)
+* [[!wikipedia Category theory]]
+* [[!wikipedia Category (mathematics) desc="Category"]]
+* [[!wikipedia Morphism]]
+* [[!wikipedia Functor]]
+* [[!wikipedia Natural transformation]]
+* [[!wikipedia Monad (category theory) desc="Monads in category theory"]]
+* [Haskell/Category Theory](http://en.wikibooks.org/wiki/Haskell/Category_theory)
+* [Category Theory & Functional Programming](http://blog.mestan.fr/2009/01/09/category-theory-functional-programming/)
+* [Learning Haskell through Category Theory, and Adventuring in Category Land](http://dekudekuplex.wordpress.com/2009/01/16/learning-haskell-through-category-theory-and-adventuring-in-category-land-like-flatterland-only-about-categories/)
+* [Resources for learning practical category theory](http://mathoverflow.net/questions/903/resources-for-learning-practical-category-theory)
+* [A Partial Ordering of some Category Theory applied to Haskell](http://blog.sigfpe.com/2010/03/partial-ordering-of-some-category.html)
-* [[!wikipedia Objective Caml]]
## Side-effects / mutation ##
-* [[!wikipedia Side effect (computer science)]]
-* [[!wikipedia Reference (computer science)]]
-* [[!wikipedia Pointer (computing)]]
+* [[!wikipedia Referential transparency (computer science)]]
+* [[!wikipedia Side effect (computer science) desc="Side effects"]]
+* [[!wikipedia Imperative programming]]
+* [[!wikipedia Reference (computer science) desc="References"]]
+* [[!wikipedia Pointer (computing) desc="Pointers"]]
+* [Pointers in OCaml](http://caml.inria.fr/resources/doc/guides/pointers.html)
+
## Continuations ##
@@ -152,14 +208,41 @@ community.
* [[!wikipedia Continuation-passing style]]
* [[!wikipedia Call-with-current-continuation]]
* [Intro to call/cc](http://community.schemewiki.org/?call-with-current-continuation) at SchemeWiki
+* [Call With Current Continuation](http://www.c2.com/cgi/wiki?CallWithCurrentContinuation)
+* [Continuations Made Simple and Illustrated](http://www.ps.uni-saarland.de/~duchier/python/continuations.html)
+* [Continuation kata](http://programming-musings.org/2006/02/12/continuation-kata/)
+* [Understanding continuations](http://keithdevens.com/weblog/archive/2004/Jul/11/continuations) [Commentary](http://lambda-the-ultimate.org/node/86)
+* [Continuations In Scheme](http://tech.phillipwright.com/2010/05/23/continuations-in-scheme/)
+* [Understanding Scheme Continuations](http://sanjaypande.blogspot.com/2004/06/understanding-scheme-continuations.html). This is tagged "Part I" but I think there's no further parts.
+* [Continuations for Curmudgeons](http://www.intertwingly.net/blog/2005/04/13/Continuations-for-Curmudgeons) [Commentary](http://lambda-the-ultimate.org/node/643)
+* [Haskell wiki on Continuations](http://www.haskell.org/haskellwiki/Continuation)
+* [Haskell wikibook on Continuation Passing Style](http://en.wikibooks.org/wiki/Haskell/Continuation_passing_style)
* [[!wikipedia Delimited continuation]]
-* [Delimited/composable continuations tutorial](composable-continuations-tutorial) at SchemeWiki
+* [Composable Continuations Tutorial](http://community.schemewiki.org/?composable-continuations-tutorial) at SchemeWiki
+* [Post by Ken](http://lambda-the-ultimate.org/node/1197#comment-12927) on Lambda the Ultimate explaining difference between undelimited and delimited continuations
+* [shift, reset and streams](http://chneukirchen.org/blog/archive/2005/04/shift-reset-and-streams.html)
+* [guile and delimited continuations](http://www.wingolog.org/archives/2010/02/26/guile-and-delimited-continuations)
+* [Delimited continuations in Scala](http://blog.richdougherty.com/2009/02/delimited-continuations-in-scala_24.html)
+* [Delimited Continuations Explained (in Scala)](http://dcsobral.blogspot.com/2009/07/delimited-continuations-explained-in.html)
+* [Partial Continuations](http://www.bluishcoder.co.nz/articles/scheme/partial-continuations.html)
+* Delimited Continuations in MzScheme:
+[Part 1](http://schemekeys.blogspot.com/2006/11/prompts-their-interaction-with-dynamic.html)
+[Part 2](http://schemekeys.blogspot.com/2006/12/delimited-continuations-in-mzscheme.html)
+[Part 3](http://schemekeys.blogspot.com/2007/01/going-further-with-primitives.html)
+[Part 4](http://schemekeys.blogspot.com/2007/01/odd-and-ends.html)
+* [Online Bibliography of Scheme Research: Continuations and Continuation Passing Style](http://library.readscheme.org/page6.html)
+* [Delimited continuations in natural language semantics](http://okmij.org/ftp/gengo/)
+
+
+## The Curry-Howard Correspondence ##
+* The [[!wikipedia Curry-Howard isomorphism]]
+* [The Curry-Howard correspondence in Haskell](http://www.thenewsh.com/~newsham/formal/curryhoward/)
+* [Haskell wikibook on the Curry-Howard Isomorphism](http://en.wikibooks.org/wiki/Haskell/The_Curry-Howard_isomorphism) at Haskell wiki
-## Monads ##
-* [[!wikipedia Monad (functional programming)]]
## Linear Logic ##
* [[!wikipedia Linear logic]]
+