आप कैसे पार्स करते हैं?
if (a > b && foo(param)) {
doSomething();
} else {
doSomethingElse();
}
तोता पेड़ शायद कुछ ऐसा दिखता है
if:
condition:
and:
lt:
left: a
right: b
function:
name: foo
param: param
true-block:
function:
name: doSomething
false-block:
function:
name: doSomethingElse
हम्म ... चलो इस पेड़ को एक सूची, उपसर्ग संकेतन में क्रमबद्ध करें
if(and(<(a, b), function(foo, param)), function(doSomething), function(doSomethingElse))
इस पार्स ट्री प्रारूप में हेरफेर करना बहुत आसान है, लेकिन मुझे एक समस्या है। मुझे विभाजकों से नफरत है। मुझे टर्मिनेटर पसंद हैं। उसी समय, मुझे व्हॉट्सएप में छिड़कना पसंद है।
if( and (<(a b) function(foo param)) function (doSomething) function ( doSomethingElse))
हम्म ... अतिरिक्त व्हाट्सएप कुछ चीजों को पार्स करने के लिए कठिन बनाता है ... शायद मैं सिर्फ एक नियम बना सकता हूं कि पेड़ को मूल पत्ती के पत्ते के रूप में दर्शाया गया है।
(if (and (< a b) (function foo param)) (function doSomething) (function doSomethineElse)
अब एक पार्स पेड़ की मेरी क्रमबद्धता है तुतलाना (नाम बदलने लागू करने के लिए समारोह, और यह शायद चलता है)। अगर मुझे ऐसे प्रोग्राम चाहिए जो प्रोग्राम लिखते हैं, तो सिर्फ पार्स ट्री में हेरफेर करना अच्छा है।
यह पूरी तरह से एस-एक्सप्रेशंस के बारे में नहीं आया है, लेकिन इसे जल्दी पहचान लिया गया था, और यह एक ऐसी विशेषता है जिसे लिस्प प्रोग्रामर उपयोग करते हैं। हमारे कार्यक्रम कुछ अर्थों में पूर्वकृत हैं, और कार्यक्रमों में हेरफेर करने के लिए कार्यक्रम लिखना प्रारूप के कारण काफी आसान है। इसीलिए सिंटैक्स की कमी को कभी-कभी एक ताकत माना जाता है।
लेकिन जैसा कि डेविड ने कहा, एक एस-एक्सप्रेशन जागरूक संपादक का उपयोग करें। आपको xml में बंद ब्रेस की तुलना में एस-एक्सप्रेशन में क्लोजिंग ब्रेस का ट्रैक खोने की अधिक संभावना है ( </foo>
केवल बंद हो जाता है <foo>
, लेकिन दायां पैरन किसी भी एस-एक्सप्रेशन को बंद कर देता है)। रैकेट में, कुछ भावों के लिए वर्ग कोष्ठक का उपयोग, अच्छी इंडेंटिंग शैली के साथ मिलकर, अधिकांश समस्याओं को ठीक करता है।
लिस्प संस्करण:
(if (and (< a b) (foo param))
(doSomething)
(doSomethingElse))
इतना भी बेकार नहीं।