Signed-off-by: Jim Pryor <profjim@jimpryor.net>
-For these assignments, you'll probably want to use a "lambda calculator" to check your work. This accepts any grammatical lambda expression and reduces it to normal form, when possible. See the page on [[using the programming languages]] for instructions and links about setting this up.
+For these assignments, you'll probably want to use a "lambda calculator" to check your work. This accepts any grammatical lambda expression and reduces it to normal form, when possible. See our [lambda-let page](/lambda-let.html), based on Chris Barker's JavaScript lambda calculator and [Oleg Kiselyov's Haskell lambda calculator](http://okmij.org/ftp/Computation/lambda-calc.html#lambda-calculator-haskell).
More Lambda Practice
[[Assignment2]]
+[Lambda Calculator](/lambda-let.html)
##[[Notes and Schedule]]##
-[[Using the programming languages]]
-
##[[Offsite Reading]]##
</head>
<body>
+
Try clicking on the "Reduce" button: <center><form>
<textarea cols="80" rows="20" name=input>
let true = (\x (\y x)) in
<textarea cols="80" rows="10" name=result></textarea>
</form> </center>
+<p>
+Notes: you have to fully specify parentheses and separate your lambdas. So for example, you can't write `(\x y. y)`; you have to write `(\x (\y y))`.
+<p>
+The parser treats symbols that haven't yet been bound (as `yes` and `no` in the example above) as free variables.
+<p>
+If you try to evaluate a non-terminating form, like `((\x (x x)) (\x (x x)))`, you'll probably have to force-quit your browser and start over. Anything you had earlier typed in the upper box will probably be lost.
+
</body>
</html>