以下是StaticCharme类型检查器的代码:
我需要帮助定义方法 typeConditional(expr,env)。它需要检查所有谓词表达式是否计算为布尔值。为了使条件表达式的类型正确,每个子句的结果表达式产生相同类型的值。条件表达式的类型是所有后续表达式的类型。
我已经有 typcheck(expr,env)方法:
def typecheck(expr, env):
if isPrimitive(expr):
return typePrimitive(expr)
elif isConditional(expr):
return typeConditional(expr, env)
elif isLambda(expr):
return typeLambda(expr, env)
elif isDefinition(expr):
typeDefinition(expr, env)
elif isName(expr):
return typeName(expr, env)
elif isApplication(expr):
return typeApplication(expr, env)
else: evalError ("Unknown expression: " + str(expr))
答案 0 :(得分:1)
对于这样的情况,我通常会尝试从简单的表达式开始,然后构建更复杂的表达式:
def typeConditional(expr, env):
# handle a literal
# handle a variable
然后考虑如何将更复杂的案例分解为更简单的案例......
另外,当你编写测试时,你可以从简单到复杂的顺序进行排序,这样你就可以依次完成它们。
答案 1 :(得分:1)
请详细说明您的功能接收的输入以及它们应生成的输出。这是非常重要的!由于你并不具体,任何想要帮助你的人都需要猜测你想做什么。
来自你的陈述:
In order for a conditional expression to be type correct:
a) All predicates must be boolean
b) All consequents must have the same type
If it typechecks:
The type of the conditional expression
is the type of the consequent expressions.
这几乎直接转换为(伪)代码:
def typeConditional(condition, env):
#receives a conditional expression, and an execution environment
# returns the expression's type if it is well typed
# or None otherwise
predicates = get_predicate_expressions(condition)
if any predicate has a type that is not Bool:
return None
else:
consequents = consequent_expressions(consition)
the_type = typcheck(first consequent, env)
if all consequents have type the_type:
return the_type
else:
return None