コード例 #1
0
ファイル: scheme_grader.py プロジェクト: lyjdwh/sicp-python
def problem_A9(grades):
    tests1 = [
        (
            "(begin (define (f x y) (+ x y)) f)",
            LambdaProcedure(pairify(["x", "y"]), pairify(["+", "x", "y"]),
                            create_global_frame()),
        ),
        (
            "(begin (define (f) (+ 2 2)) f)",
            LambdaProcedure(nil, pairify(["+", 2, 2]), create_global_frame()),
        ),
        (
            "(begin (define (f x) (* x x)) f)",
            LambdaProcedure(pairify(["x"]), pairify(["*", "x", "x"]),
                            create_global_frame()),
        ),
        (
            "(begin (define (f x) 1 2) f)",
            LambdaProcedure(pairify(["x"]), pairify(["begin", 1, 2]),
                            create_global_frame()),
        ),
        ("(define (0 x) (* x x))", "SchemeError"),
    ]
    if check_func(scheme_eval, tests1, comp=scheme_equal):
        return True
コード例 #2
0
def problem_8(grades):
    tests1 = [('(lambda (x y) (+ x y))',
               LambdaProcedure(pairify(['x', 'y']), pairify(['+', 'x', 'y']),
                               create_global_frame()))]
    tests2 = [
        ('(lambda (x) (+ x) (+ x x))',
         LambdaProcedure(pairify(['x']),
                         pairify(['begin', ['+', 'x'], ['+', 'x', 'x']]),
                         create_global_frame())),
        ('(begin (define x (lambda () 2)) x)',
         LambdaProcedure(nil, 2, create_global_frame())),
    ]
    if check_func(scheme_eval, tests1, comp=scheme_equal):
        return True
    if check_func(scheme_eval, tests2, comp=scheme_equal):
        return True
コード例 #3
0
def problem_A9(grades):
    tests1 = [
        ('(begin (define (f x y) (+ x y)) f)',
         LambdaProcedure(pairify(['x', 'y']), pairify(['+', 'x', 'y']),
                         create_global_frame())),
        ('(begin (define (f) (+ 2 2)) f)',
         LambdaProcedure(nil, pairify(['+', 2, 2]), create_global_frame())),
        ('(begin (define (f x) (* x x)) f)',
         LambdaProcedure(pairify(['x']), pairify(['*', 'x', 'x']),
                         create_global_frame())),
        ('(begin (define (f x) 1 2) f)',
         LambdaProcedure(pairify(['x']), pairify(['begin', 1, 2]),
                         create_global_frame())),
        ('(define (0 x) (* x x))', 'SchemeError'),
    ]
    if check_func(scheme_eval, tests1, comp=scheme_equal):
        return True
コード例 #4
0
ファイル: scheme_grader.py プロジェクト: lyjdwh/sicp-python
def problem_8(grades):
    tests1 = [(
        "(lambda (x y) (+ x y))",
        LambdaProcedure(pairify(["x", "y"]), pairify(["+", "x", "y"]),
                        create_global_frame()),
    )]
    tests2 = [
        (
            "(lambda (x) (+ x) (+ x x))",
            LambdaProcedure(
                pairify(["x"]),
                pairify(["begin", ["+", "x"], ["+", "x", "x"]]),
                create_global_frame(),
            ),
        ),
        (
            "(begin (define x (lambda () 2)) x)",
            LambdaProcedure(nil, 2, create_global_frame()),
        ),
    ]
    if check_func(scheme_eval, tests1, comp=scheme_equal):
        return True
    if check_func(scheme_eval, tests2, comp=scheme_equal):
        return True
コード例 #5
0
def problem_B11(grades):
    # Note: Doesn't check well-formed but unrequired list matching.
    # E.g., (lambda (a . b) 2) and (lambda x 2)
    tests1 = [
        ('(lambda (x y z) x)',
         LambdaProcedure(pairify(['x', 'y', 'z']), 'x',
                         create_global_frame())),
        ('(lambda (0 y z) x)', 'SchemeError'),
        ('(lambda (x y nil) x)', 'SchemeError'),
        ('(lambda (x y (and z)) x)', 'SchemeError'),
        ('(lambda (x #t z) x)', 'SchemeError'),
    ]
    tests2 = [
        ("(lambda (h e l l o) 'world)", 'SchemeError'),
        ("(lambda (c s 6 1 a) 'yay)", 'SchemeError'),
    ]

    if check_func(scheme_eval, tests1, comp=scheme_equal):
        return True
    if check_func(scheme_eval, tests2, comp=scheme_equal):
        return True