在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 类型在函数定义和调用之间是不同的(第一个元素是前者的 IntBoolean 在后者中,那是行不通的)。

但是,只要这只是一个错字,像这样的东西应该可以解决问题:

 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))