आप जियोकैशिंग के बहुत बड़े प्रशंसक हैं, जिसमें बाहर घूमने-फिरने का शौक और पहेलियाँ हल करने का शौक, दोनों एक साथ मिलते हैं। आपके इलाके की जियोकैशिंग वेबसाइट हर कैश के GPS निर्देशांक तो बताती है, लेकिन उन सबको इकट्ठा करने के लिए एक कुशल मार्ग बनाने की सुविधा नहीं देती। संयोग से आपकी मशीन पर पथ खोजने वाला सॉफ्टवेयर पहले से इंस्टॉल है, लेकिन वह जियोकैशिंग वेबसाइट से अलग GPS फॉर्मेट इस्तेमाल करता है। इस डेटा को पथ खोजने वाले सॉफ्टवेयर में डालने के लिए, आपको वेबसाइट पर मौजूद हर GPS निर्देशांक के अक्षांश और देशांतर, दोनों के डिग्री और गोलार्ध पार्स करने होंगे।
आपको GPS निर्देशांक पार्स करने हैं। हर निर्देशांक दशमलव अंश प्रारूप के उस रूप में लिखा जाता है जिसमें गोलार्ध स्पष्ट रूप से दिए जाते हैं:
<LATITUDE_DEGREES> <LATITUDE_HEMISPHERE>, <LONGITUDE_DEGREES> <LONGITUDE_HEMISPHERE>
हर अलग हिस्से के लिए ये मान्य वैल्यू हैं:
<LATITUDE_DEGREES>: 0..90 (दोनों समेत) के बीच की एक दशमलव संख्या<LATITUDE_HEMISPHERE>: N या S
<LONGITUDE_DEGREES>: 0..180 (दोनों समेत) के बीच की एक दशमलव संख्या<LONGITUDE_HEMISPHERE>: E या W
उदाहरण के लिए, "48.8584 N, 2.2945 E" पार्स होकर यह बनता है:
<LATITUDE_DEGREES>: 48.8584<LATITUDE_HEMISPHERE>: N<LONGITUDE_DEGREES>: 2.2945<LONGITUDE_HEMISPHERE>: Eआपके सामने 11 कार्य हैं, जिनमें आप GPS निर्देशांकों को एक-एक करके पार्स करेंगे। आप Prolog के डेफिनिट क्लॉज़ ग्रामर (DCG) सपोर्ट का इस्तेमाल करेंगे, जिसे संरचित टेक्स्ट पार्स करने के लिए बनाया गया है।
शुरू करने में मदद के लिए, स्टब फाइल में पहले से ही dcg/basics लाइब्रेरी शामिल है, इस तरह:
:- use_module(library(dcg/basics)).
सिर्फ एक अल्पविराम (",") पार्स करने के लिए comma रूल लागू कीजिए:
?- string_codes(",", Codes), phrase(comma, Codes).
सिर्फ एक स्पेस (" ") पार्स करने के लिए space रूल लागू कीजिए:
?- string_codes(" ", Codes), phrase(space, Codes).
space रूल को बदलकर ऐसा बनाइए कि वह न्यूलाइनों को छोड़कर सभी व्हाइटस्पेस पार्स करे:
?- string_codes("\t", Codes), phrase(space, Codes).
?- string_codes("\n", Codes), phrase(space, Codes).
false.
अक्षांश का गोलार्ध "N" या "S" हो सकता है, जिसे north या south एटम में पार्स किया जाना चाहिए।
अक्षांश का गोलार्ध पार्स करने के लिए latitude_hemisphere रूल लागू कीजिए:
?- string_codes("N", Codes), phrase(latitude_hemisphere(Hemisphere), Codes).
Hemisphere = north.
देशांतर का गोलार्ध "E" या "W" हो सकता है, जिसे east या west एटम में पार्स किया जाना चाहिए।
देशांतर का गोलार्ध पार्स करने के लिए longitude_hemisphere रूल लागू कीजिए:
?- string_codes("E", Codes), phrase(longitude_hemisphere(Hemisphere), Codes).
Hemisphere = east.
किसी देशांतर या अक्षांश के अंश एक दशमलव संख्या के रूप में परिभाषित होते हैं।
दशमलव संख्याएँ पार्स करने के लिए degrees रूल लागू कीजिए:
?- string_codes("748.012", Codes), phrase(degrees(Degrees), Codes).
Degrees = 748.012.
अक्षांश के अंश सिर्फ दशमलव संख्याएँ नहीं हैं, बल्कि वे 0..90 (दोनों समेत) के बीच की दशमलव संख्याएँ हैं।
ऊपर दी गई सीमा का इस्तेमाल करके अक्षांश के अंश पार्स करने के लिए latitude_degrees रूल लागू कीजिए:
?- string_codes("48.745", Codes), phrase(latitude_degrees(Degrees), Codes).
Degrees = 48.745.
?- string_codes("117.844", Codes), phrase(latitude_degrees(Degrees), Codes).
false.
देशांतर के अंश सिर्फ दशमलव संख्याएँ नहीं हैं, बल्कि वे 0..180 (दोनों समेत) के बीच की दशमलव संख्याएँ हैं।
ऊपर दी गई सीमा का इस्तेमाल करके देशांतर के अंश पार्स करने के लिए longitude_degrees रूल लागू कीजिए:
?- string_codes("178.773", Codes), phrase(longitude_degrees(Degrees), Codes).
Degrees = 178.773.
?- string_codes("-22.523", Codes), phrase(longitude_degrees(Degrees), Codes).
false.
अक्षांश के दो हिस्से होते हैं: उसके अंश और गोलार्ध, जिन्हें एक स्पेस से अलग किया जाता है।
एक अक्षांश पार्स करने के लिए latitude रूल लागू कीजिए:
?- string_codes("56.101 N", Codes), phrase(latitude(Degrees, Hemisphere), Codes).
Degrees = 56.101,
Hemisphere = north.
अक्षांश के दो हिस्से होते हैं: उसके अंश और गोलार्ध, जिन्हें एक स्पेस से अलग किया जाता है।
एक अक्षांश पार्स करने के लिए latitude रूल लागू कीजिए:
?- string_codes("143.889 W", Codes), phrase(longitude(Degrees, Hemisphere), Codes).
Degrees = 143.889,
Hemisphere = west.
निर्देशांक के दो हिस्से होते हैं: उसके अक्षांश और देशांतर, जिन्हें एक अल्पविराम और उसके बाद एक स्पेस से अलग किया जाता है।
अक्षांश के दोनों हिस्सों, यानी उसके अंश और गोलार्ध, को पार्स करने के लिए coordinate रूल लागू कीजिए:
?- string_codes("48.8584 N, 2.2945 E", Codes), phrase(coordinate(Latitude, LatitudeHemisphere, Longitude, LongitudeHemisphere), Codes).
Latitude = 48.8584,
LatitudeHemisphere = north,
Longitude = 2.2945,
LongitudeHemisphere = east.
Exercism पर साइन अप कीजिए और Prolog को 109 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।