-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathsymbolic.py
69 lines (53 loc) · 1.35 KB
/
symbolic.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# from sympy import * # sympy 不能将运算符符号化,改用字符(eg: ‘a')替代符号
from orderedPair import *
__all__ = ['ql', 'eq', 'memq', 'symt', 'eql']
def quote_list(seq):
if seq is None:
return None
else:
return cons(str(car(seq)), quote_list(cdr(seq)))
def equal(sy1, sy2):
if sy1 == sy2:
return True
else:
return False
def memq(sy, seq):
if seq is None:
return False
elif eq(sy, car(seq)):
return seq
else:
return memq(sy, cdr(seq))
def symbol_test(sy):
if isinstance(sy, (str, int, float)):
return True
else:
return False
def equal_list(seq1, seq2):
if symt(seq1) and symt(seq2):
if eq(seq1, seq2):
return True
else:
return False
elif seq1 is None and seq2 is None:
return True
elif eq(car(seq1), car(seq2)):
return equal_list(cdr(seq1), cdr(seq2))
else:
return False
ql = quote_list
eq = equal
symt = symbol_test
eql = equal_list
if __name__ == '__main__':
l1 = lister(1, 2, 3)
l2 = lister(4, 5, 6)
l3 = lister(7, 8, 9)
ll = lister(l1, l2, l3)
display(ql(l1))
display(ql(ll))
display(car(ql(ll)))
display(cdr(ql(ll)))
display(car(cdr(ql(ll))))
print(type(car(cdr(ql(ll)))), '\n')
display(eql('a', 'b'))