X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=offsite_reading.mdwn;h=b39906cd93679e46b5b536fe3f26a82886c56e94;hb=a952192898d22300538716b640291d9943683a6a;hp=4339092022925ab61b2870336a4e7bd19ede5c79;hpb=336e427a64c1956e15a722da848a906a149d42fd;p=lambda.git diff --git a/offsite_reading.mdwn b/offsite_reading.mdwn index 43390920..b39906cd 100644 --- a/offsite_reading.mdwn +++ b/offsite_reading.mdwn @@ -14,22 +14,10 @@ of an article you don't fully understand, so that you can discuss it with the re the group and hopefully get to a point where you can read it again and get more out of. (Rinse and repeat.) - -## General issues about variables and binding in programming languages ## - -* [[!wikipedia Variable (programming) desc="Variables"]] -* [[!wikipedia Variable shadowing]] -* [[!wikipedia Scope (programming) desc="Variable scope"]] -* [[!wikipedia Free variables and bound variables]] -* [[!wikipedia Name binding]] -* [[!wikipedia Name resolution]] -* [[!wikipedia Parameter (computer science) desc="Function parameters"]] - -## Functions as values, etc ## +## Functions ## * [[!wikipedia Higher-order function]] * [[!wikipedia First-class function]] -* [[!wikipedia Closure (computer science) desc="Closures"]] * [[!wikipedia Currying]] ## Functional vs imperative programming ## @@ -40,65 +28,60 @@ get more out of. (Rinse and repeat.) * [[!wikipedia Referential transparency (computer science)]] * [[!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]]## + +* [Try Scheme in your web browser](http://tryscheme.sourceforge.net/) + ## Untyped lambda calculus and combinatory logic ## * [[!wikipedia Lambda calculus]] +* Our [[Lambda evaluator]] * [Chris Barker's Lambda Tutorial](http://homepages.nyu.edu/~cb125/Lambda) -* [Lambda Animator](http://thyer.name/lambda-animator/)
+* [Lambda Animator](http://thyer.name/lambda-animator/) +* [Penn lambda calculator](http://www.ling.upenn.edu/lambda/) Pedagogical software developed by Lucas Champollion, Josh Tauberer and Maribel Romero.
+ + * [[!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 B,C,K,W system]] - -* [Chris Barker's Iota and Jot](http://semarch.linguistics.fas.nyu.edu/barker/Iota/) -* [[!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 Scheme (programming language) desc="Wikipedia overview of Scheme"]]
-
-* 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:
+* Jeroen Fokker, "The Systematic Construction of a One-combinator Basis for Lambda-Terms" Formal Aspects of Computing 4 (1992), pp. 776-780.
+
- + [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."
+* [To Dissect a Mockingbird](http://dkeenan.com/Lambda/index.htm)
- 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) This is a short introductory text that introduces common Scheme techniques.
-
-* 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.
+## Evaluation Order ##
-* 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.
+* [[!wikipedia Evaluation strategy]]
+* [[!wikipedia Eager evaluation]]
+* [[!wikipedia Lazy evaluation]]
+* [[!wikipedia Strict programming language]]
-* 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. One widely implemented standard is [The
-Revised^5 Report on Scheme](http://www.schemers.org/Documents/Standards/R5RS/HTML/),
-or R5RS, published in 1998.
-A new standard [R6RS](http://www.r6rs.org/final/html/r6rs/r6rs.html) ([Libraries for R6RS](http://www.r6rs.org/final/html/r6rs-lib/r6rs-lib.html))
-was ratified in 2007, and this is implemented in Racket; but it also has many detractors and has not been fully
-accepted in the community. As a result, the Scheme language [may in the future split](http://scheme-reports.org/2009/position-statement.html)
-into a lean, minimal base, closer to
-R5RS Scheme, and a richer language like R6RS Scheme that standardizes many of the add-ons that programmers tend to build
-on top of the base.
+## Confluence, Normalization, Undecidability ##
-* [Scheme FAQ](http://community.schemewiki.org/?scheme-faq)
-* [Scheme Requests for Implementation](http://srfi.schemers.org/) (SRFI)
-* The [Schematics Scheme Cookbook](http://schemecookbook.org/) is a collaborative effort to produce documentation and recipes for using Scheme for common tasks.
+* [[!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
## Recursion and the Y Combinator ##
@@ -112,14 +95,7 @@ on top of the base.
* [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) 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...
-
-## Evaluation Order ##
-
-* [[!wikipedia Evaluation strategy]]
-* [[!wikipedia Eager evaluation]]
-* [[!wikipedia Lazy evaluation]]
-* [[!wikipedia Strict programming language]]
-
+* [The church of the least fixed point, by Sans Pareil](http://www.springerlink.com/content/n4t2v573m58g2755/)
## Types ##
@@ -139,21 +115,7 @@ on top of the base.
* [[!wikipedia Type polymorphism]]
* [[!wikipedia System F]]
-## Learning OCaml ##
-
-* [[!wikipedia Objective Caml desc="Wikipedia overview of OCaml"]]
-
-* [A Concise Introduction to Objective Caml](http://www.csc.villanova.edu/~dmatusze/resources/ocaml/ocaml.html)
-
-* Here are [two](http://www.cs.jhu.edu/~scott/pl/lectures/caml-intro.html) [other](http://pauillac.inria.fr/caml/FAQ/stephan.html) brief overviews of OCaml, aimed at readers who already have some programming experience. Here are [two](http://pauillac.inria.fr/caml/FAQ/exemples-eng.html) [more](http://pauillac.inria.fr/caml/FAQ/qrg-eng.html), even briefer.
-
-* Here's a [more detailed tutorial](http://www.ocaml-tutorial.org/) for OCaml.
-
-* The start of the [OCaml Reference Manual](http://caml.inria.fr/pub/docs/manual-ocaml/manual003.html) has another tutorial.
-
-* Jason Hickey has posted a [draft of a nice book introducing OCaml](http://www.cs.caltech.edu/courses/cs134/cs134b/book.pdf).
-
-* FAQs for [OCaml Beginners](http://pauillac.inria.fr/caml/FAQ/FAQ_DEBUTANT-eng.html), and [a few more](http://caml.inria.fr/resources/doc/faq/). Also FAQs for [OCaml Experts](http://pauillac.inria.fr/caml/FAQ/FAQ_EXPERT-eng.html).
+##[[Learning OCaml]]##
## Side-effects / mutation ##