PL λαβ

Lab 2.2b[김예령]: 기본 함수 본문

kos

Lab 2.2b[김예령]: 기본 함수

IC4RUS 2021. 4. 27. 20:31

Comment

조교님과 최준혁선배님의 코드를 합쳐 환경과 기본함수를 수정한 뒤 사칙연산 함수를 추가했습니다.

 

Result

 

Code

코드가 500줄이 넘어가는 관계 상 추가한 부분만 올립니다. 전체코드는 github.com/icaruswithoutwings/CrazyRichWeekendFarm 에서 확인할 수 있습니다.

def builtin_plus(args):
    if (args.car().type == Type.INT) and (args.cdr().car().type == Type.INT):
        var = (args.car().value) + (args.cdr().car().value)
        return "Error OK", mkint(var)
    return "Error Args", nilp()


def builtin_minus(args):
    if (args.car().type == Type.INT) and (args.cdr().car().type == Type.INT):
        var = (args.car().value) - (args.cdr().car().value)
        return "Error OK", mkint(var)
    return "Error Args", nilp()


def builtin_multi(args):
    if (args.car().type == Type.INT) and (args.cdr().car().type == Type.INT):
        var = (args.car().value) * (args.cdr().car().value)
        return "Error OK", mkint(var)
    return "Error Args", nilp()


def builtin_divide(args):
    if (args.car().type == Type.INT) and (args.cdr().car().type == Type.INT):
        if args.cdr().car().value != 0:
            var = (args.car().value) / (args.cdr().car().value)
            return "Error OK", mkint(var)
        else:
            return "Divide Zero Error", nilp()
    return "Error Args", nilp()


if __name__ == "__main__":
    env = env_create(nilp())

    env_set(env, mksym("CAR"), make_builtin(builtin_car))
    env_set(env, mksym("CDR"), make_builtin(builtin_cdr))
    env_set(env, mksym("CONS"), make_builtin(builtin_cons))
    env_set(env, mksym("+"), make_builtin(builtin_plus))
    env_set(env, mksym("-"), make_builtin(builtin_minus))
    env_set(env, mksym("*"), make_builtin(builtin_multi))
    env_set(env, mksym("/"), make_builtin(builtin_divide))

    while True:
        parsedlist = Parser(Lexer(Input()._input()).lex())
        # print("\n===== === PAR === =====")
        # print(parsedlist)
        # print("===== === OUT === =====")
        print(eval_expr(parsedlist, env))
        # print(env.symbols)

'kos' 카테고리의 다른 글

Lab 3.1a[김예령]: 람다와 클로저  (0) 2021.04.29
Lab 3.1a[최준혁]: 람다와 클로저  (0) 2021.04.27
Lab 3.1: 람다와 클로저  (0) 2021.04.27
Lab 2.1a[박인철]: 환경  (0) 2021.04.27
Lab 2.2[최준혁]: 기본 함수  (0) 2021.04.24
Comments