मेरा प्रश्न: अनावश्यक ब्रांड्स के बिना अभिव्यक्ति को सुंदर प्रिंट करने का सबसे साफ तरीका क्या है?सुंदर प्रिंट अभिव्यक्ति के रूप में संभव के रूप में कुछ कोष्ठक के साथ?
मैं लैम्ब्डा अभिव्यक्ति के निम्नलिखित प्रतिनिधित्व:
Term ::= Fun(String x, Term t)
| App(Term t1, Term t2)
| Var(String x)
सम्मेलन App
द्वारा छोड़ा साहचर्य है, कि, a b c
(a b) c
के रूप में व्याख्या की है और समारोह निकायों संभव के रूप में सही करने के लिए जहाँ तक खिंचाव है कि है, λ x. x y
को λ x. (x y)
के रूप में व्याख्या किया गया है।
मेरे पास एक पार्सर है जो एक अच्छी नौकरी करता है, लेकिन अब मुझे एक सुंदर प्रिंटर चाहिए।
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
}
ऊपर प्रिंटर हमेशा कहते (
)
भाव के आसपास (परमाणु चर के लिए छोड़कर): यहाँ क्या मैं वर्तमान में (छद्म स्केला) पड़ता है। इस प्रकार Fun(x, App(Fun(y, x), y))
के लिए यह
(λ x.((λ y.x) y))
यह नहीं पैदा करता है मैं
λ x.(λ y.x) y
मुझे पता है कि एकमात्र संदर्भ है नॉर्मन रैमसे का "उपसर्ग और पोस्ट ऑपरेटर के साथ अनस्पर्शिंग अभिव्यक्तियां"। यदि आप मानक एमएल के बारे में जानते हैं तो आपको धारा 4 में कोड को अनुकूलित करने में सक्षम होना चाहिए। http://www.cs.tufts.edu/~nr/pubs/unparse-abstract.html –
क्या यह भाषा अज्ञेयवादी है या आप स्कैला उत्तर की तलाश में हैं? किसी भी तरह से, आप व्यापक दर्शक प्राप्त करने के लिए प्रश्न को टैग करना चाहते हैं। – neontapir