Page 2: Combining Predicates
Unit 2, Lab 3, Page 2
On this page, you will combine predicates using Boolean functions to write on the stage in three colors.
Boolean Functions
At the very lowest level, computer circuitry is made of wires, and each wire is either on or off. So the only operations that can be performed at that lowest level are those that operate on single-bit values (just ones and zeros, that is, just ons and offs). These are called logical (or Boolean) functions. (They’re predicates, because their range is Booleans, but these are special in that their domain is also Booleans.) There are three Boolean functions in the Operators palette:
Notice that both the blocks themselves and the input slots in the blocks are hexagonal. Boolean functions take Boolean values (True
or False
) as inputs and report a new Boolean value as output. When you use Boolean functions in a program, though, the inputs will usually be expressions such as .
Experiment with different input values in all three blocks, and take notes about the results you get.
Instead of dragging a
true
orfalse
block into the input slot of anand
,or
, ornot
block, you can click the empty input slot to control atrue
/false
toggle:
The and
and not
blocks work exactly the way you’d expect from the meanings of those words in English:
-
reports
true
, and any other combination of inputs reportsfalse
. - reports the opposite of whichever input value you use.
But or
is a little different in computer science. In English, the word “or” has two different meanings:
- Either but not both: such as “Let’s check whether it will be rainy or sunny tomorrow.” In computer science, this is called exclusive or because one option excludes the other.
- Either or both: such as “Ask your teacher if you have any questions or if you need help.” This is called inclusive or because it’s possible for both options to be included.
- Experiment. Does the block implement exclusive or inclusive
or
?
The , , and blocks will appear as
AND
,
OR
, and
NOT
and will work exactly the same way as they do in Snap!.
Make the blocks (which reports
true
if the first number is less than or equal to the second number, andfalse
otherwise), (which reportstrue
if the first number is greater than or equal to the second number, andfalse
otherwise), and . (You can copy the characters ≤, ≥, and ≠ from this page and paste them into the Snap! Make-a-block window.)So these
Build a predicate that tells whether an input is between two other inputs, and test it with several different cases.
You can decide whether
between?
will include the two boundary inputs or not.
Making a Predicate
-
Choose the hexagonal predicate shape.
- You must use the block to report the result of reporters (including predicates).
:
- Use
between?
to create a script that lets you write on the stage in three colors (depending on the height on the stage), using your mouse.
-
Because there are only two Boolean values (
true
andfalse
), there are only four combinations of inputs for a two-input Boolean operator. Here are the four combinations shown with theor
operator:
-
With
or
, the four combinations reporttrue
,true
,true
, andfalse
in that order. (Check for yourself that this is true.) So, you can represent theor
function as TTTF (using T and F as abbreviations fortrue
andfalse
). What are the four letters for theand
function? (Assume the same ordering of the inputs: TT, TF, FT, and FF as shown above withor
.) -
Make up another set of four letters (such as TFTF), and build a predicate function with that behavior. Describe how the function behaves.
Click to see an example showing and describing the behavior of TFTF.
The TFTF function reports true whenever the second input is true no matter what the first input is. It’s not a useful function because you could just use the second input as the predicate instead of building this predicate function. - Do the same thing with another set of four letters.
- How many possible two-input Boolean operators are there?
-
Obviously, TTTF (the
or
function) is useful, but TTTT is not useful (why not?). Which of the possible two-input Boolean operators do you think would be useful? Discuss why. - How many three-input Boolean operators are there?
-
With