UNPKG

812 Btext/coffeescriptView Raw
1###
2 Substitute new expr for old expr in expr.
3
4 Input: push expr
5
6 push old expr
7
8 push new expr
9
10 Output: Result on stack
11###
12
13
14
15subst = ->
16 i = 0
17 save()
18 p3 = pop(); # new expr
19 p2 = pop(); # old expr
20 if (p2 == symbol(NIL) || p3 == symbol(NIL))
21 restore()
22 return
23 p1 = pop(); # expr
24 if (istensor(p1))
25 p4 = alloc_tensor(p1.tensor.nelem)
26 p4.tensor.ndim = p1.tensor.ndim
27 for i in [0...p1.tensor.ndim]
28 p4.tensor.dim[i] = p1.tensor.dim[i]
29 for i in [0...p1.tensor.nelem]
30 push(p1.tensor.elem[i])
31 push(p2)
32 push(p3)
33 subst()
34 p4.tensor.elem[i] = pop()
35
36 check_tensor_dimensions p4
37
38 push(p4)
39 else if (equal(p1, p2))
40 push(p3)
41 else if (iscons(p1))
42 push(car(p1))
43 push(p2)
44 push(p3)
45 subst()
46 push(cdr(p1))
47 push(p2)
48 push(p3)
49 subst()
50 cons()
51 else
52 push(p1)
53 restore()