2016-06-24 17 views
0

Ich habe eine Zeichenfolge mit Syntax analysierenEstablishing quine Art in scala

lazy val expr: Parser[Term ~ Option[<recursion>]] = term ~ opt(expr) 

Sie sehen, es verwendet, um sich Unterausdrücke zu analysieren. Aber was bringt dieser Typ? Um das Problem zu reproduzieren, ich created ein etwas ähnliches Problem

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

Wie Sie sehen, habe ich Any da ich weiß nicht, wie genaue Art zu geben.

Die Listen definieren irgendwie Proto-Typ List[A], erweitert durch Cons[A](head: A, tail: List[A]) und einige magische Nil. Dadurch kann die Liste irgendwie wiederholt werden. Aber was soll ich in meinem Fall tun?

Antwort

0

Ich bin nicht sicher, was Sie versuchen, hier zu tun, weil Ihr result Typ zwischen der Definition der Funktion und Aufruf unterschiedlich ist (das erste Element Int in den ehemaligen und Boolean im letzteren, die nicht funktionieren können).

Aber, vorausgesetzt, das war nur ein Tippfehler, so etwas wie dies sollte es tun:

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