X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=blobdiff_plain;f=assignment1.mdwn;h=93136f22353c02033c4f263082ae015e017b1744;hp=9be95780ca0faf912b436a7fe13e81f0d6c0cf8d;hb=97fd9ed2423e6c6d9e0dabdce6bc334f8439637f;hpb=d541a6500e8d82e1a8862924dca00c360d482c6a diff --git a/assignment1.mdwn b/assignment1.mdwn index 9be95780..93136f22 100644 --- a/assignment1.mdwn +++ b/assignment1.mdwn @@ -1,4 +1,5 @@ -**Reduction** +Reduction +--------- Find "normal forms" for the following (that is, reduce them as far as it's possible to reduce them): @@ -12,7 +13,8 @@ them): 7. (\x (x x x)) (\x (x x x)) -**Booleans** +Booleans +-------- Recall our definitions of true and false. @@ -24,21 +26,29 @@ In Racket, these can be defined like this: (define true (lambda (t) (lambda (f) t))) (define false (lambda (t) (lambda (f) f))) -(8). Define a "neg" operator that negates "true" and "false". -Expected behavior: (((neg true) 10) 20) evaluates to 20, -(((neg false) 10) 20) evaluates to 10. +8. [8] Define a "neg" operator that negates "true" and "false". +Expected behavior: -(9). Define an "and" operator. + (((neg true) 10) 20) -10. Define an "xor" operator. (If you haven't seen this term before, here's a truth table: +evaluates to 20, and + + (((neg false) 10) 20) + +evaluates to 10. + +9. [9] Define an "and" operator. + +10. [10] Define an "xor" operator. (If you haven't seen this term before, here's a truth table: true xor true = false true xor false = true false xor true = true false xor false = false + ) -11. Inspired by our definition of boolean values, propose a data structure +* 11. Inspired by our definition of boolean values, propose a data structure capable of representing one of the two values "black" or "white". If we have one of those values, call it a black-or-white-value, we should be able to write: