我应该如何实现元组的scala解释器?
我正在实现scala解释器,我遇到了一些问题 首先,我想实现我应该如何实现元组的scala解释器?,scala,interpreter,type-mismatch,Scala,Interpreter,Type Mismatch,我正在实现scala解释器,我遇到了一些问题 首先,我想实现tuple类 在myValue.scala中,存在以下类: case class TupleV(values: List[Type]) extends Value 另外,在myExpr.scala中,存在以下类 case class TupleE(expressions: List[Type] extends Expr Type也位于Expr.scala中,如下所示: sealed trait Type case object In
tuple
类
在myValue.scala
中,存在以下类:
case class TupleV(values: List[Type]) extends Value
另外,在myExpr.scala
中,存在以下类
case class TupleE(expressions: List[Type] extends Expr
Type
也位于Expr.scala
中,如下所示:
sealed trait Type
case object IntT extends Type
case object BooleanT extends Type
case object TupleT extends Type
case object ListT extends Type
case object FunctionT extends Type
case TupleE(values)=>TupleV(values)
case TupleE(values)=>TupleV(values)
因此,我按照如下方式实施:
sealed trait Type
case object IntT extends Type
case object BooleanT extends Type
case object TupleT extends Type
case object ListT extends Type
case object FunctionT extends Type
case TupleE(values)=>TupleV(values)
case TupleE(values)=>TupleV(values)
但它说List[Expr]已找到,List[Value]是必需的。我的代码中有什么问题?我该怎么修呢
此外,我还尝试使用ConsE和ConsV类以不同的方式实现,这使我能够将列表分为头尾两部分:
case class ConsE(head: Expr, tail: Expr) extends Expr//in Expr.scala
case class ConsV(head: Value, tail: Value) extends Value//in Value.scala
case ConsE(head, tail)=>ConsV(interp(head), interp(tail)//my implementation for ConsV interpreter&works well now
用这个,我试着
case TupleE(expression)=>expression match{
case ConsE(head, tail)=>ConsV(head, tail)
}
case TupleE(expression)=>expression match{
case ConsE(head, tail)=>ConsV(head, tail)
}
但它返回ConsE的“构造函数无法实例化为预期类型”错误。我应该如何修复它?尝试替换它
case class TupleV(values: List[Type]) extends Value
case class TupleE(expressions: List[Type]) extends Expr
与
(这些定义是在练习中给出的,还是您自己可以修改的?)
基于
case TupleE(values)=>TupleV(values)
你在写翻译
def interpret(expr: Expr): Value
i、 e.继续你在中开始的内容
那么TupleV
,TupleE
的定义应该在后面。以前他们上面的定义对我来说没什么意义
当您键入检查Expr
def typecheck(expr: Expr): Type // or Option[Type]
然后你会有一个层次结构
case class TupleT(types: List[Type]) extends Type
因此,我按照如下方式实施:
sealed trait Type
case object IntT extends Type
case object BooleanT extends Type
case object TupleT extends Type
case object ListT extends Type
case object FunctionT extends Type
case TupleE(values)=>TupleV(values)
case TupleE(values)=>TupleV(values)
但它说List[Expr]已找到,List[Value]是必需的。问题是什么
我的代码有问题吗?我该怎么修呢
这是不可复制的。代码编译
用这个,我试着
case TupleE(expression)=>expression match{
case ConsE(head, tail)=>ConsV(head, tail)
}
case TupleE(expression)=>expression match{
case ConsE(head, tail)=>ConsV(head, tail)
}
但它返回:“构造函数不能实例化为预期类型”
ConsE的错误
这个错误很明显:在
TupleE(expression)
expression
中有typeList[type]
,它不能匹配ConsE
,它只能匹配普通的scalaList什么是type
?不应该是TupleV(值:List[Value])extends Value
和TupleE(值:List[Expr])extends Expr
?请提供显示错误的真实代码,而不是带有语法错误的片段。至少您需要显示包含案例
语句的匹配
。不确定这是否仍然相关,但我在您的问题中找到了类型
的定义密封特征类型
案例对象IntT扩展类型
…这与此问题的类型相同。当有人告诉我只关注一个问题时,我改变了问题的格式。我也编辑了我的问题。谢谢你的回答。但是,为case类TupleV和TupleE提供的那些定义是为了练习,我无法更改。在本练习中,它包含ConsE函数,允许我将列表划分为head和tail,并将其写成case ConsE(head,tail)=>ConsV(interp(head),interp(tail))我试图用这个解释器来划分元组,但效果不好。我能用这个解释器解决这个问题吗?@Chhong39那么你应该在你的问题中提供可复制的代码。当前无法复制“List[Expr]
found,List[Value]
是必需的”。代码编译@Chhong39关于ConsE
、ConsV
和其他定义的定义,这应该是您的问题。非常感谢您投入时间。我添加了这些定义和我试图做的事情。