Scala如何「想」讓我定義s-expr?在英文中,我們遞歸地定義s-expr,如下所示:「s-expr是一個原子或s-exprs的列表。」你怎麼說在斯卡拉?在Scala中定義s-expr的習慣方式
我敢肯定,這是錯誤的:
// Scala 2.11.2
trait Sexpr
case class Atom(text: String) extends Sexpr
type List[Sexpr] = Sexpr // To my amazement, the compiler accepts this!
val blah = Atom("blah")
def matchtest(sexpr: Sexpr): Unit = sexpr match {
case blah :: Nil => println(blah) // But the compiler won't accept this
case _ => println("no match")
}
matchtest(List(Atom("blah")))
Either
可能不是很適合這個,或者說,從那以後,我不得不Left
和Right
區分,這是題外話。
你如何使這樣的遞歸類定義,以便它與Scala的其餘部分很好地工作?
這個Scala S-expr解析器(帶有SNil和SCons的專業概念)是否包含您所需的內容:http://matt.might.net/articles/parsing-s-expressions-scala/ – NietzscheanAI
@ user217281728是的。哇!這甚至解決了我實際上在做什麼,我認爲這是太多的問題:在一個更大的Scala程序中實現簡單的類似Scheme的語言。 –
作爲獎勵,我認爲該網站也有M表達式... – NietzscheanAI