コード例 #1
0
ファイル: tests.py プロジェクト: heleifz/pyScm
 def test_apply(self):
     code = """
     (define (sum lst)
         (if (eq? lst '())
             0
             (+ (car lst) (sum (cdr lst)))))
     (define (map f lst)
         (if (eq? lst '())
             '()
             (cons (f (car lst)) (map f (cdr lst)))))
     (sum (map car '((1 2 3) (4 5 6))))
     """
     ast = pyscm.parse(code)
     self.assertEqual(5, pyscm.evaluate(ast, pyscm.make_base()))
     code = """
     ((lambda (x y) (+ x y)) 1 9)
     """
     ast = pyscm.parse(code)
     self.assertEqual(10, pyscm.evaluate(ast, pyscm.make_base()))
     code = """
     (define (func x y)
         (let ((z 3) (w 7))
             (+ x w y z)))
     (func 9 9)
     """
     ast = pyscm.parse(code)
     self.assertEqual(28, pyscm.evaluate(ast, pyscm.make_base()))
コード例 #2
0
ファイル: tests.py プロジェクト: heleifz/pyScm
 def test_if(self):
     t = pyscm.make_boolean(True) 
     f = pyscm.make_boolean(False) 
     ast = pyscm.parse('(if (> 2 1) 9 10)')[1]
     self.assertEqual(9, pyscm.evaluate(ast, pyscm.make_base()))
     ast = pyscm.parse('(if (> 1 2) 9 10)')[1]
     self.assertEqual(10, pyscm.evaluate(ast, pyscm.make_base()))
     ast = pyscm.parse('(if (> 2 3) 10)')[1]
     self.assertEqual(None, pyscm.evaluate(ast, pyscm.make_base()))
     ast = pyscm.parse('(if (< 2 3) 10)')[1]
     self.assertEqual(10, pyscm.evaluate(ast, pyscm.make_base()))
コード例 #3
0
ファイル: tests.py プロジェクト: heleifz/pyScm
 def test_tail(self):
     code = """
     (define (sum2 n acc)
         (if (= n 0)
         acc
         (sum2 (- n 1) (+ n acc))))
     (sum2 1000 0)
     """
     self.assertEqual(500500, pyscm.run(code, pyscm.make_base()))
コード例 #4
0
ファイル: tests.py プロジェクト: heleifz/pyScm
 def test_cond(self):
     t = pyscm.make_boolean(True) 
     f = pyscm.make_boolean(False) 
     code = """
     (define (f x)
         (cond
             ((< x 3) 1)
             ((< x 5) 44)
             (else 99)
             )) 
     (define a (f 2))
     (define b (f 4))
     (define c (f 33))
     """
     ast = pyscm.parse(code)
     base = pyscm.make_base()
     pyscm.evaluate(ast, base)
     self.assertEqual(1, base['a'])
     self.assertEqual(44, base['b'])
     self.assertEqual(99, base['c'])