X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=blobdiff_plain;f=topics%2Fweek1.mdwn;h=725c4d18dc8ce3edec89428701071f9f4e9b12b5;hp=24d606b2a4ced242f0a37f96e904c339e8bb19e0;hb=9ca52fa8a329edc6975f0aa19856a4a8d782ad77;hpb=26ee92a52489d4249af8c5b1a0066b0e4e6be7e1 diff --git a/topics/week1.mdwn b/topics/week1.mdwn index 24d606b2..725c4d18 100644 --- a/topics/week1.mdwn +++ b/topics/week1.mdwn @@ -134,7 +134,7 @@ It's okay to also write it all inline, like so: `let x be 5; y be x + 1 in 2 * y The `x + 1` that is evaluated to give the value that `y` gets bound to uses the (more local) binding of `x` to `5`, not the (previous, less local) binding of `x` to `0`. By the way, the parentheses in that displayed expression were just to focus your attention. It would have parsed and meant the same without them. -Now we can allow ourselves to introduce λ-expressions in the following way. If a λ-expression is applied to an argument, as in: `(`λ `x.` φ`) M`, for any (simple or complex) expressions φ and `M`, this means the same as: `let x be M in` φ. That is, the argument to the λ-expression provides (when evaluated) a value for the variable `x` to be bound to, and then the result of the whole thing is whatever φ evaluates to, under that binding to `x`. +Now we can allow ourselves to introduce λ-expressions in the following way. If a λ-expression is applied to an argument, as in: `(`λ `x.` φ`) M`, for any (simple or complex) expressions φ and `M`, this means the same as: `let x be M in` φ. That is, the argument `M` to the λ-expression provides (when evaluated) a value for the variable `x` to be bound to, and then the result of the whole thing is whatever φ evaluates to, under that binding to `x`. If we restricted ourselves to only that usage of λ-expressions, that is when they were applied to all the arguments they're expecting, then we wouldn't have moved very far from the decidable fragment of arithmetic we began with. @@ -383,8 +383,8 @@ is a pattern, meaning the same as `x1 & x2 & []`. Note that while `x & xs` match For the time being, these are the only patterns we'll allow. But since the definition of patterns is recursive, this permits very complex patterns. What would this evaluate to: let - ([x, y], [z:zs, w]) match ([[], 'true], [[10, 20, 30], 'false]) - in (z, y) + ([xs, ys], [z:zs, ws]) match ([[], [1]], [[10, 20, 30], [0]]) + in z & ys Also, we will permit complex patterns in λ-expressions, too. So you can write: