--- a
+++ b/Test/examples/learn_pyke.tst
@@ -0,0 +1,97 @@
+# learn_pyke.tst
+
+    >>> import sys
+    >>> import pyke
+    >>> import os
+    >>> new_path = os.path.join(os.path.dirname(os.path.dirname(pyke.__file__)),
+    ...                         'examples/learn_pyke')
+    >>> sys.path.append(new_path)
+
+    >>> import run
+    >>> from io import StringIO
+    >>> import sys
+
+    >>> sys.stdin = StringIO('8\n2\n2\n13\n')
+    >>> run.run()
+    ______________________________________________________________________________
+    Assume that the following two patterns are contained in different rules
+    and that none of the pattern variables are initially bound to values:
+    <BLANKLINE>
+    pattern 1: ((ho, $_, ($a, $a)), ($a, $a, $b), ($a, *$b))
+    pattern 2: ($a, $a, $x)
+    <BLANKLINE>
+    If the two patterns are matched together, what will $x be bound to?
+      1. (a, b)
+      2. $a
+      3. ho
+      4. ($a, *$b)
+      5. (ho, *$b)
+      6. (ho, *($a, $a))
+      7. (ho, ($a, $a))
+      8. (ho, $a, $a)
+      9. (ho, *(ho, ho))
+     10. (ho, (ho, ho))
+     11. (ho, $_, (ho, ho))
+     12. (ho, ho, (ho, ho))
+     13. (ho, ho, ho)
+     14. nothing, the two patterns don't match
+     15. nothing, pattern 1 is not a legal pattern
+     16. I don't have a clue...
+    ? [1-16] Incorrect: Pattern variable '$a' is bound to a value.
+    ______________________________________________________________________________
+    "Rest" pattern variables are used at the end of a tuple pattern to match the
+    rest of the tuple.
+    <BLANKLINE>
+    What is the syntax for a "rest" pattern variable?
+      1. $rest
+      2. _rest
+      3. Preceding a pattern variable with an asterisk ('*'), like: *$foo.
+    ? [1-3] Incorrect: A "rest" pattern variable is any pattern variable preceded
+               by an asterisk ('*').
+    ______________________________________________________________________________
+    After matching the following two patterns, what is $c set to?
+    <BLANKLINE>
+    pattern 1: ($a, $b, *$c)
+    pattern 2: (1, 2, 3)
+      1. 3
+      2. (3)
+      3. (3,)
+      4. nothing, the two patterns don't match
+      5. nothing, pattern 1 is not a legal pattern
+    ? [1-5] Correct!  (Note that a comma is not required for singleton tuples in PyKE).
+    ______________________________________________________________________________
+    Assume that the following two patterns are contained in different rules
+    and that none of the pattern variables are initially bound to values:
+    <BLANKLINE>
+    pattern 1: ((ho, $_, ($a, $a)), ($a, $a, $b), ($a, *$b))
+    pattern 2: ($a, $a, $x)
+    <BLANKLINE>
+    If the two patterns are matched together, what will $x be bound to?
+      1. (a, b)
+      2. $a
+      3. ho
+      4. ($a, *$b)
+      5. (ho, *$b)
+      6. (ho, *($a, $a))
+      7. (ho, ($a, $a))
+      8. (ho, $a, $a)
+      9. (ho, *(ho, ho))
+     10. (ho, (ho, ho))
+     11. (ho, $_, (ho, ho))
+     12. (ho, ho, (ho, ho))
+     13. (ho, ho, ho)
+     14. nothing, the two patterns don't match
+     15. nothing, pattern 1 is not a legal pattern
+     16. I don't have a clue...
+    ? [1-16] Correct!
+        matching Pattern 1: (ho, $_, ($a, $a))
+              to Pattern 2: $a
+           binds Pattern 2: $a to Pattern 1: (ho, $_, (ho, ho))
+        matching Pattern 1: ($a, $a, $b)
+              to Pattern 2: $a, which is bound to Pattern 1: (ho, $_, ($a, $a))
+           binds Pattern 1: $a to ho,
+             and Pattern 1: $b to Pattern 1: ($a, $a) which expands to (ho, ho)
+        matching Pattern 1: ($a, *$b)
+              to Pattern 2: $x
+           binds Pattern 2: $x to Pattern 1: ($a, *$b) which expands to (ho, ho, ho)
+