只有同类型才能比

👁️ 3 人浏览 💬 0 人评论 ❤️ 添加收藏

(每道题开头都有同一段:表达式用嵌套元组表示——("num",5) 是整数、("str","x") 字符串、("bool",True) 布尔、("var","x") 变量、("add",e1,e2) 相加、("eq",e1,e2) 相等、("if",c,e1,e2) 条件。type_of(e, env) 推它的类型,不合法交回 "ERR"。)

1 == 21 == "x" 的类型:

def type_of(e, env):
    """给表达式推类型:num→int、str→str、bool→bool、var 查 env、运算查操作数。不合法交回 "ERR"。"""
    k = e[0]
    if k == "num":
        return "int"
    if k == "str":
        return "str"
    if k == "bool":
        return "bool"
    if k == "var":
        return env.get(e[1], "ERR")
    if k == "add":                       # 同类型、且是 int 或 str 才能加
        a = type_of(e[1], env)
        b = type_of(e[2], env)
        if a == b and a in ("int", "str"):
            return a
        return "ERR"
    if k == "eq":                        # 同类型才能比,结果是 bool
        a = type_of(e[1], env)
        b = type_of(e[2], env)
        if a != "ERR" and a == b:
            return "bool"
        return "ERR"
    if k == "if":                        # 条件必 bool,两分支同类型
        c = type_of(e[1], env)
        a = type_of(e[2], env)
        b = type_of(e[3], env)
        if c == "bool" and a == b and a != "ERR":
            return a
        return "ERR"
    return "ERR"

print(type_of(("eq", ("num", 1), ("num", 2)), {}) + "/" + type_of(("eq", ("num", 1), ("str", "x")), {}))
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论