17 from joy.utils.polytypes import (
18 doc_from_stack_effect,
37 fi, fo = infer(pop, swap, rolldown, rrest, ccons)[0]
42 25 (--) ∘ pop swap rolldown rrest ccons
43 28 (a1 --) ∘ swap rolldown rrest ccons
44 31 (a3 a2 a1 -- a2 a3) ∘ rolldown rrest ccons
45 34 (a4 a3 a2 a1 -- a2 a3 a4) ∘ rrest ccons
46 37 ([a4 a5 ...1] a3 a2 a1 -- a2 a3 [...1]) ∘ ccons
47 40 ([a4 a5 ...1] a3 a2 a1 -- [a2 a3 ...1]) ∘
52 print doc_from_stack_effect(fi, fo)
57 ([a4 a5 ...1] a3 a2 a1 -- [a2 a3 ...1])
62 from joy.parser import text_to_expression
63 from joy.utils.stack import stack_to_string
68 e = text_to_expression('0 1 2 [3 4]') # reverse order
69 print stack_to_string(e)
87 {a1: 0, a2: 1, a3: 2, a4: 3, a5: 4, s2: (), s1: ()}
93 g = reify(u, (fi, fo))
94 print doc_from_stack_effect(*g)
99 (... [3 4 ] 2 1 0 -- ... [1 2 ])
102 Unification Works "in Reverse"
103 ------------------------------
107 e = text_to_expression('[2 3]')
111 u = unify(e, fo)[0] # output side, not input side
119 {a2: 2, a3: 3, s2: (), s1: ()}
125 g = reify(u, (fi, fo))
126 print doc_from_stack_effect(*g)
131 (... [a4 a5 ] 3 2 a1 -- ... [2 3 ])
139 fi, fo = infer(dup, mul)[0]
145 28 (a1 -- a1 a1) ∘ mul
152 e = text_to_expression('"two"')
153 print stack_to_string(e)
165 except JoyTypeError, err:
171 Cannot unify 'two' and f1.