2012-09-22 17 views
6

Forth का उपयोग IF स्टेटमेंट का उपयोग क्यों करता है ... ENDIF के बजाय?Forth का उपयोग IF कथन का उपयोग क्यों करता है ... ENDIF के बजाय?

मैं एक (गैर-अनुरूप) फर्थ कंपाइलर चीज़ को कार्यान्वित कर रहा हूं। असल में, फर्थ का वाक्यविन्यास IF कथन के संबंध में मेरे प्रति बहुत सहज है।

IF ."Statement is true" 
ELSE ."Statement is not true" 
THEN ."Printed no matter what; 

क्यों न खत्म होने वाली बयान एक THEN है? इससे भाषा मेरे लिए बेहद अजीब पढ़ती है। मेरे कंपाइलर के लिए, मैं इसे ENDIF जैसे कुछ बदलने के लिए विचार कर रहा हूं जो अधिक प्राकृतिक पढ़ता है। लेकिन, पहली जगह में आईएफ-थेंशन स्टेटमेंट पीछे पीछे क्या तर्क था?

+0

क्या कोई सोचता है कि यह प्रोग्रामर के लिए बेहतर होगा .se? – Earlz

+1

आपको चक मूर से पूछना होगा। कोई और जवाब नहीं जान पाएगा। [यहां वह कहता है जब उन्होंने "कभी-कभी आलोचनात्मक पोस्टफिक्स सशर्त"] (http://www.colorforth.com/HOPL.html) पेश किया। –

+0

यदि मुझे बहुत गलती नहीं है, तो वहां (या, शायद, थे) कार्यान्वयन (इस समय याद नहीं कर सकते हैं, क्षमा करें) जहां ईएनडीआईएफ को फिर से समानार्थी के रूप में परिभाषित किया गया था, जिसका अर्थ है कि आप पहले नहीं हैं 'IF-ELSE-THEN' के अनुक्रम को थोड़ा असामान्य खोजने के लिए। मुझे, मुझे इसके साथ कोई समस्या नहीं है, हालांकि। (मुझे लगता है कि मैंने बहुत पहले कुछ किताबों में इसके लिए एक स्पष्टीकरण देखा था, और यह @ एशलेफ़ ने अपनी जवाब में कहा था।) –

उत्तर

6

बस, के रूप में इसके बारे में लगता है कि "IF मामला है कि, ऐसा करते हैं, ELSE do that ... और THEN साथ ... जारी रखें"

या बेहतर अभी तक, Factor, RetroForth में के रूप में उपयोग कोटेशन (, ...) इस मामले में यह विशेष संकलन-समय के शब्दों के बिना पूरी तरह से पोस्टफिक्स है; केवल नियमित शब्द स्टैक से पते लेते हैं: [ do this ] [ do that ] if या [ do this ] when या [ do that ] unless। मैं व्यक्तिगत रूप से इसे बहुत पसंद करता हूं।

एक तरफ पुन: कोटेशन

यहाँ how quotations are compiled in RetroForth है। मेरे अपने फर्थ में (जो मेरे स्वयं के वीएम के लिए संकलित है) में, मैंने बस QUOTE निर्देश जोड़ा जो अगले पते को स्टैक पर धक्का देता है और एन-बाइट्स पर कूदता है। एन-बाइट्स को RETURN निर्देश और if, when, unless शब्दों से पहले समाप्त होने वाले पते (एसएस) के साथ एक अनुमान का उपभोग करने की उम्मीद है; उचित के रूप में बुलाओ। वास्तव में बहुत सरल, और उद्धरण आम तौर पर all kinds of beautiful abstractions away from thinking about the stack के लिए दरवाजा खोलते हैं।

+0

मैंने उद्धरणों के बारे में कभी नहीं सुना है! हालांकि यह एक उत्कृष्ट अमूर्त तंत्र की तरह दिखता है। जब मैंने पहली बार इस परियोजना पर सेट किया था तो मैं सोच रहा था कि फर्थ – Earlz

+1

में अज्ञात फ़ंक्शन होने के लिए यह संभव था या नहीं, यह इस स्थिति पर लागू हो सकता है या नहीं, लेकिन "संगत भाषाओं की जोय" (भाग 1] का भाग 1 (http://www.codecommit.com/blog/cat/the-joy-of-concatenative-भाषा-part-1), [भाग 2] (http://www.codecommit.com/blog/cat/the- आनन्द-संगत-भाषा-भाग -2), [भाग 3] (http://www.codecommit.com/blog/cat/the-joy-of-concatenative-भाषा-part-3)) कहता है: " कंडीशनर भी पहली नज़र में काफी अजीब लगते हैं, लेकिन सतह के नीचे वे गहराई से सुरुचिपूर्ण हैं ... " –

+0

मुझे थोड़ा और सोचने के बाद इसके साथ एक समस्या है। आप '1 [10] [20] अगर कुछ की तरह कुछ कैसे कार्यान्वित करेंगे। अपेक्षित आउटपुट '10' होना चाहिए .. लेकिन, यह लाइन से बाहर निकलता है और जब उद्धरण" रिटर्न "होता है, तो यह या तो 10' 'या' 20' जो सही नहीं है। या इसे इस तरह के आंतरिक रिटर्न के लिए एक माध्यमिक "छुपा" कॉल स्टैक के साथ लागू किया जाना चाहिए? – Earlz

संबंधित मुद्दे