196 lines
4.6 KiB
Python
196 lines
4.6 KiB
Python
|
|
def abs(stack, expression, dictionary):
|
|
(v1, stack) = stack
|
|
v2 = abs(v1)
|
|
return (v2, stack), expression, dictionary
|
|
|
|
|
|
def ccons(stack, expression, dictionary):
|
|
(s1, (v1, (v2, stack))) = stack
|
|
return ((v2, (v1, s1)), stack), expression, dictionary
|
|
|
|
|
|
def cons(stack, expression, dictionary):
|
|
(s1, (v1, stack)) = stack
|
|
return ((v1, s1), stack), expression, dictionary
|
|
|
|
|
|
def decr(stack, expression, dictionary):
|
|
(i1, stack) = stack
|
|
i2 = i1 - 1
|
|
return (i2, stack), expression, dictionary
|
|
|
|
|
|
def dup(stack, expression, dictionary):
|
|
(v1, stack) = stack
|
|
return (v1, (v1, stack)), expression, dictionary
|
|
|
|
|
|
def dupd(stack, expression, dictionary):
|
|
(v1, (v2, stack)) = stack
|
|
return (v1, (v2, (v2, stack))), expression, dictionary
|
|
|
|
|
|
def dupdd(stack, expression, dictionary):
|
|
(v1, (v2, (v3, stack))) = stack
|
|
return (v1, (v2, (v3, (v3, stack)))), expression, dictionary
|
|
|
|
|
|
def first(stack, expression, dictionary):
|
|
((v1, s1), stack) = stack
|
|
return (v1, stack), expression, dictionary
|
|
|
|
|
|
def fourth(stack, expression, dictionary):
|
|
((v1, (v2, (v3, (v4, s1)))), stack) = stack
|
|
return (v4, stack), expression, dictionary
|
|
|
|
|
|
def incr(stack, expression, dictionary):
|
|
(i1, stack) = stack
|
|
i2 = i1 + 1
|
|
return (i2, stack), expression, dictionary
|
|
|
|
|
|
def non_negative(stack, expression, dictionary):
|
|
(i1, stack) = stack
|
|
v1 = i1 >= 0
|
|
return (v1, stack), expression, dictionary
|
|
|
|
|
|
def pop(stack, expression, dictionary):
|
|
(v1, stack) = stack
|
|
return stack, expression, dictionary
|
|
|
|
|
|
def popd(stack, expression, dictionary):
|
|
(v1, (v2, stack)) = stack
|
|
return (v1, stack), expression, dictionary
|
|
|
|
|
|
def popop(stack, expression, dictionary):
|
|
(v1, (v2, stack)) = stack
|
|
return stack, expression, dictionary
|
|
|
|
|
|
def popopd(stack, expression, dictionary):
|
|
(v1, (v2, (v3, stack))) = stack
|
|
return (v1, stack), expression, dictionary
|
|
|
|
|
|
def quoted(stack, expression, dictionary):
|
|
(v1, (v2, stack)) = stack
|
|
return (v1, ((v2, ()), stack)), expression, dictionary
|
|
|
|
|
|
def reco(stack, expression, dictionary):
|
|
((v1, s1), (v2, stack)) = stack
|
|
return ((v2, s1), stack), expression, dictionary
|
|
|
|
|
|
def rest(stack, expression, dictionary):
|
|
((v1, s1), stack) = stack
|
|
return (s1, stack), expression, dictionary
|
|
|
|
|
|
def rrest(stack, expression, dictionary):
|
|
((v1, (v2, s1)), stack) = stack
|
|
return (s1, stack), expression, dictionary
|
|
|
|
|
|
def second(stack, expression, dictionary):
|
|
((v1, (v2, s1)), stack) = stack
|
|
return (v2, stack), expression, dictionary
|
|
|
|
|
|
def shift(stack, expression, dictionary):
|
|
((v1, s1), (s2, stack)) = stack
|
|
return (s1, ((v1, s2), stack)), expression, dictionary
|
|
|
|
|
|
def sqr(stack, expression, dictionary):
|
|
(i1, stack) = stack
|
|
i2 = i1 * i1
|
|
return (i2, stack), expression, dictionary
|
|
|
|
|
|
def stackd(stack, expression, dictionary):
|
|
(v1, stack) = stack
|
|
stack = (stack, stack)
|
|
return (v1, stack), expression, dictionary
|
|
|
|
|
|
def swons(stack, expression, dictionary):
|
|
(v1, (s1, stack)) = stack
|
|
return ((v1, s1), stack), expression, dictionary
|
|
|
|
|
|
def third(stack, expression, dictionary):
|
|
((v1, (v2, (v3, s1))), stack) = stack
|
|
return (v3, stack), expression, dictionary
|
|
|
|
|
|
def truthy(stack, expression, dictionary):
|
|
(v1, stack) = stack
|
|
v2 = bool(v1)
|
|
return (v2, (v1, stack)), expression, dictionary
|
|
|
|
|
|
def tuckl(stack, expression, dictionary):
|
|
(v1, stack) = stack
|
|
return (v1, ((), stack)), expression, dictionary
|
|
|
|
|
|
def tuckld(stack, expression, dictionary):
|
|
(v1, (v2, stack)) = stack
|
|
return (v1, (v2, ((), stack))), expression, dictionary
|
|
|
|
|
|
def uncons(stack, expression, dictionary):
|
|
((v1, s1), stack) = stack
|
|
return (s1, (v1, stack)), expression, dictionary
|
|
|
|
|
|
def unit(stack, expression, dictionary):
|
|
(v1, stack) = stack
|
|
return ((v1, ()), stack), expression, dictionary
|
|
|
|
|
|
def unswons(stack, expression, dictionary):
|
|
((v1, s1), stack) = stack
|
|
return (v1, (s1, stack)), expression, dictionary
|
|
|
|
|
|
def gcd(stack, expression, dictionary):
|
|
(i1, (i2, stack)) = stack
|
|
v1 = True
|
|
while v1:
|
|
i3 = i2 % i1
|
|
v1 = i3 > 0
|
|
(i1, (i2, stack)) = (i3, (i1, stack))
|
|
return (i2, stack), expression, dictionary
|
|
|
|
|
|
def sum(stack, expression, dictionary):
|
|
(s1, stack) = stack
|
|
(i1, stack) = (0, stack)
|
|
while s1:
|
|
(i2, s1) = s1
|
|
i3 = i1 + i2
|
|
(i1, stack) = (i3, stack)
|
|
return (i1, stack), expression, dictionary
|
|
|
|
|
|
def product(stack, expression, dictionary):
|
|
(s1, stack) = stack
|
|
(i1, stack) = (1, stack)
|
|
while s1:
|
|
(i2, s1) = s1
|
|
i3 = i1 * i2
|
|
(i1, stack) = (i3, stack)
|
|
return (i1, stack), expression, dictionary
|
|
|
|
|
|
1 ?-
|
|
|