Factor में आपका स्वागत है! Factor एक कॉन्कैटेनेटिव भाषा है: आप square(add(2, 3)) जैसे फंक्शन कॉल करने की जगह बाएँ से दाएँ वर्ड की एक कतार लिखते हैं, जैसे 2 3 + square, और ये वर्ड एक साझा डेटा स्टैक के ज़रिए एक-दूसरे को वैल्यू भेजते हैं। किसी घाट पर रखे माल के डिब्बों का ढेर सोचिए, जिसमें सबसे नया डिब्बा सबसे ऊपर होता है।
! से लाइन टिप्पणी शुरू होती है। ! से लेकर लाइन के अंत तक का सब कुछ Factor छोड़ देता है। नीचे के उदाहरणों में ! का इस्तेमाल यह बताने के लिए किया गया है कि कोड क्या करता है।
कोई लिटरल लिखने पर वह स्टैक के सबसे ऊपर चढ़ जाता है। कोड बाएँ से दाएँ पढ़ा जाता है।
1 2 3 ! stack (bottom → top): 1 2 3
हर वर्ड अपने इनपुट स्टैक के ऊपर से पढ़ता है और अपने आउटपुट वापस वहीं लिख देता है। . सबसे ऊपर की वैल्यू निकालकर उसे प्रिंट करता है; .s कुछ भी हटाए बिना पूरे स्टैक को प्रिंट करता है, जिससे यह देखना आसान हो जाता है कि किसी छोटे कोड टुकड़े ने पीछे क्या छोड़ा है।
हर वर्ड के साथ ( inputs -- outputs ) रूप का एक स्टैक इफेक्ट लिखा होता है। यह उस वर्ड का अनुबंध है: वर्ड स्टैक के ऊपर से इनपुट हटाता है और उनकी जगह आउटपुट छोड़ देता है। अंदर लिखे नाम इंसानों के लिए लिखे गए हैं; स्टैक खुद नामों से नहीं, स्थिति से चलता है। स्टैक के सबसे ऊपर वाला नाम दाईं ओर वाला होता है।
: से वर्ड की परिभाषा शुरू होती है, उसके बाद स्टैक इफेक्ट आता है, फिर बॉडी, और अंत में ; उसे खत्म करता है। Factor का कंपाइलर जाँचता है कि बॉडी वाकई वही छोड़ती है जो स्टैक इफेक्ट बताता है।
: restow ( a b -- b a ) swap ;
ये kernel वर्ड बिना कोई गणित किए स्टैक के ऊपरी हिस्से को इधर-उधर कर देते हैं। ये सिर्फ डिब्बों को इधर-उधर करते हैं:
dup ( x -- x x ) ! copy the top crate
drop ( x -- ) ! remove the top crate
swap ( x y -- y x ) ! flip the top two
over ( x y -- x y x ) ! copy the second crate onto the top
nip ( x y -- y ) ! remove the second crate
rot ( x y z -- y z x ) ! roll the third crate up to the top
जब एक डिब्बे से दो वर्ड को काम चलाना हो तो dup उठाइए, डिब्बा फेंकने के लिए drop, ऊपर के दो डिब्बे गलत क्रम में हों तो swap, नीचे वाले डिब्बे के साथ काम करने के लिए over या nip, और दबे हुए डिब्बे को ऊपर लाने के लिए rot।
इसका बड़ा परिवार (-rot, dupd, swapd, 2dup, …) भी इसी तरीके से काम करता है; उन वर्ड से आप आगे मिलेंगे।
एक कतार में लिखे वर्ड बाएँ से दाएँ चलते हैं: हर वर्ड उस स्टैक पर काम करता है जो उससे पहले वाला वर्ड छोड़कर गया था। नीचे देखिए कि swap nip स्टैक 1 2 (नीचे → ऊपर) के साथ एक-एक वर्ड करके क्या करता है:
1 2 ! 1 2 the starting crates
swap ! 2 1 swap flipped the top two
nip ! 1 nip dropped the 2nd-from-top crate (the 2)
और यहाँ उन्हीं शुरुआती डिब्बों पर dup rot, फिर से एक-एक वर्ड करके:
1 2 ! 1 2 the starting crates
dup ! 1 2 2 dup copied the top crate
rot ! 2 2 1 rot rolled the 3rd-from-top crate up to the top
वर्ड lowercase-kebab-case इस्तेमाल करते हैं: छोटे अक्षर, जिनके बीच हाइफन लगा होता है।
आप एक नाविक हैं जो क्वे पर माल के क्रेट फिर से लगा रहे हैं। हर काम एक ही शब्द है, जिसके अंदर सिर्फ शफल शब्द इस्तेमाल होते हैं। कोई गणित नहीं।
swap-crates शब्द बनाइए। यह स्टैक से दो क्रेट उठाता है और उन्हें उलटे क्रम में वापस छोड़ देता है।
1 2 swap-crates .s
! 2
! 1
clear-spill शब्द बनाइए। यह स्टैक से तीन क्रेट उठाता है, सबसे नीचे के दो क्रेट वापस छोड़ देता है और सबसे ऊपर वाला क्रेट हटा देता है।
1 2 3 clear-spill .s
! 1
! 2
peek-under शब्द बनाइए। यह स्टैक से दो क्रेट उठाता है और नीचे वाले क्रेट की एक कॉपी उनके ऊपर रखकर उन्हें वापस छोड़ देता है।
1 2 peek-under .s
! 1
! 2
! 1
tidy-deck शब्द बनाइए। यह स्टैक से x y z के क्रम में तीन क्रेट उठाता है और पीछे z z y छोड़ देता है: सबसे नीचे वाले क्रेट को हटा दीजिए, फिर सबसे ऊपर वाले क्रेट की दो कॉपी बीच वाले क्रेट के नीचे छोड़ दीजिए।
1 2 3 tidy-deck .s
! 3
! 3
! 2
Exercism पर साइन अप कीजिए और Factor को 47 कॉन्सेप्ट163 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।