Benim Soru: Bir ifadeyi gereksiz parantez olmadan güzel yazdırmanın en temiz yolu nedir?Mümkün olduğu kadar az parantez içeren güzel baskı ifadesi?
Ben lambda ifadeleri aşağıdaki gösterimi: Kongre App
By
Term ::= Fun(String x, Term t)
| App(Term t1, Term t2)
| Var(String x)
önce sol taraf, yani o, a b c
(a b) c
olarak yorumlanır ve işlev organları olabildiğince sağa kadarıyla germek olduğunu λ x. x y
, λ x. (x y)
olarak yorumlanır.
İyi bir iş yapan bir çözümleyici var, ancak şimdi Güzel bir yazıcı istiyorum.
term match {
case Fun(v, t) => "(λ %s.%s)".format(v, prettyPrint(t))
case App(s, t) => "(%s %s)".format(prettyPrint(s), prettyPrint(t))
case Var(v) => v
}
yukarıdaki yazıcı her zaman (atomik değişkenler hariç) ifadeler etrafında (
)
koyar: İşte şu anda (sözde scala) yanı da bu. Böylece Fun(x, App(Fun(y, x), y))
için o sadece App parametre tiplerini kontrol etmeleri ben
λ x.(λ y.x) y
bildiğim tek referans Norman Ramsey "öneki ve Post Operatörleri ile Unparsing İfadeler" dir. Standart ML'nin bir kısmını biliyorsanız, 4. Bölümdeki kodu uyarlayabilmelisiniz. http://www.cs.tufts.edu/~nr/pubs/unparse-abstract.html –
Bu dil agnostik mi, yoksa bir Scala cevabı mı arıyorsunuz? Her iki durumda da, daha geniş bir kitleye ulaşmak için soruyu etiketlemek isteyebilirsiniz. – neontapir