在scala中建立quine类型
Establishing quine type in scala
我必须用语法分析字符串
lazy val expr: Parser[Term ~ Option[<recursion>]] = term ~ opt(expr)
你看,它用自己来解析子表达式。但是这种类型会导致什么?为了重现这个问题,我created一个有点类似的问题
def quine(depth: Int, result: (Any, Option[Any])): (Any, Option[Any]) =
if (depth == 0) result else {quine(depth - 1, (depth, Some(result)))}
quine(5, (true, None))
如您所见,我使用了 Any
,因为我不知道如何给出确切的类型。
列表以某种方式定义了原型类型 List[A]
,由 Cons[A](head: A, tail: List[A])
和一些魔法 Nil
扩展。这允许列表以某种方式重复出现。但是,我的情况应该怎么办?
我不确定你想在这里做什么,因为你的 result
类型在函数定义和调用之间是不同的(第一个元素是前者的 Int
和 Boolean
在后者中,那是行不通的)。
但是,只要这只是一个错字,像这样的东西应该可以解决问题:
case class Quine(n: Int, q: Option[Quine])
def quine(depth: Int, result: Quine): Quine =
if (depth == 0) result else
quine(depth - 1, Quine(depth, Some(result)))
quine(5, Quine(6, None))
我必须用语法分析字符串
lazy val expr: Parser[Term ~ Option[<recursion>]] = term ~ opt(expr)
你看,它用自己来解析子表达式。但是这种类型会导致什么?为了重现这个问题,我created一个有点类似的问题
def quine(depth: Int, result: (Any, Option[Any])): (Any, Option[Any]) =
if (depth == 0) result else {quine(depth - 1, (depth, Some(result)))}
quine(5, (true, None))
如您所见,我使用了 Any
,因为我不知道如何给出确切的类型。
列表以某种方式定义了原型类型 List[A]
,由 Cons[A](head: A, tail: List[A])
和一些魔法 Nil
扩展。这允许列表以某种方式重复出现。但是,我的情况应该怎么办?
我不确定你想在这里做什么,因为你的 result
类型在函数定义和调用之间是不同的(第一个元素是前者的 Int
和 Boolean
在后者中,那是行不通的)。
但是,只要这只是一个错字,像这样的东西应该可以解决问题:
case class Quine(n: Int, q: Option[Quine])
def quine(depth: Int, result: Quine): Quine =
if (depth == 0) result else
quine(depth - 1, Quine(depth, Some(result)))
quine(5, Quine(6, None))