lambda eval: constants now seem OK
[lambda.git] / lambda_evaluator.mdwn
index 87797df..3fba8fa 100644 (file)
@@ -22,7 +22,7 @@ Blank lines are fine.
 
 *Abbreviations*: In an earlier version, you couldn't use abbreviations. `\x y. y x x` had to be written `(\x (\y ((y x) x)))`. We've upgraded the parser though, so now it should be able to understand any lambda term that you can.
 
-*Constants*:  (NOT YET IMPLEMENTED!) The combinators `S`, `K`, `I`, `C`, `B`, `W`, and `T` are pre-defined to their standard values. Also, integers will automatically be converted to Church numerals. (`0` is `\s z. z`, `1` is `\s z. s z`, and so on.)
+*Constants*: The combinators `S`, `K`, `I`, `C`, `B`, `W`, and `T` are pre-defined to their standard values. Also, integers will automatically be converted to Church numerals. (`0` is `\s z. z`, `1` is `\s z. s z`, and so on.)
 
 
 
@@ -38,6 +38,7 @@ let and = \l r. l r false in
 )
 </textarea>
 <input id="PARSE" value="Normalize" type="button">
+<input id="ETA" type="checkbox">do eta-reductions too
 <noscript><p>You may not see it because you have JavaScript turned off. Uffff!</p></noscript>
 <script src="/code/lambda.js"></script>
 <script src="/code/tokens.js"></script>
@@ -86,7 +87,7 @@ Object.prototype.error = function (message, t) {
             // string = JSON.stringify(expr, ['key', 'name', 'message', 'value', 'arity', 'first', 'second', 'tag', 'variable', 'left', 'right', 'bound', 'body' ], 4);
 //                     string = expr.to_string() + "\n\n~~>\n\n";
                        string = '';
-                       string = string + reduce(expr, false, false).to_string();
+                       string = string + reduce(expr, document.getElementById('ETA').value, false).to_string();
         } catch (e) {
             string = JSON.stringify(e, ['name', 'message', 'from', 'to', 'key',
                     'value', 'arity', 'first', 'second', 'third', 'fourth'], 4);