Add some Scheme standard procedures.
(self)
| 151 | else: raise w |
| 152 | |
| 153 | def add_globals(self): |
| 154 | "Add some Scheme standard procedures." |
| 155 | import math, cmath, operator as op |
| 156 | self.update(vars(math)) |
| 157 | self.update(vars(cmath)) |
| 158 | self.update({ |
| 159 | '+':op.add, '-':op.sub, '*':op.mul, '/':op.truediv, 'not':op.not_, |
| 160 | '>':op.gt, '<':op.lt, '>=':op.ge, '<=':op.le, '=':op.eq, |
| 161 | 'equal?':op.eq, 'eq?':op.is_, 'length':len, 'cons':cons, |
| 162 | 'car':lambda x:x[0], 'cdr':lambda x:x[1:], 'append':op.add, |
| 163 | 'list':lambda *x:list(x), 'list?': lambda x:isa(x,list), |
| 164 | 'null?':lambda x:x==[], 'symbol?':lambda x: isa(x, Symbol), |
| 165 | 'boolean?':lambda x: isa(x, bool), 'pair?':is_pair, |
| 166 | 'port?': lambda x:isa(x,file), 'apply':lambda proc,l: proc(*l), |
| 167 | 'eval':lambda x: eval(expand(x)), 'load':lambda fn: load(fn), 'call/cc':callcc, |
| 168 | 'open-input-file':open,'close-input-port':lambda p: p.file.close(), |
| 169 | 'open-output-file':lambda f:open(f,'w'), 'close-output-port':lambda p: p.close(), |
| 170 | 'eof-object?':lambda x:x is eof_object, 'read-char':readchar, |
| 171 | 'read':read, 'write':lambda x,port=sys.stdout:port.write(to_string(x)), |
| 172 | 'display':lambda x,port=sys.stdout:port.write(x if isa(x,str) else to_string(x))}) |
| 173 | return self |
| 174 | |
| 175 | isa = isinstance |
| 176 |