# புரொலாக்

**புரோலாக்**(Prolog) என்பது நிரலிகள் (programs) எழுத பயன்படும் ஒரு கணினி மொழியாகும். குறிப்பாக, ஏரணத்தை (ஏரணம் - logic ) அடிப்படையாக வைத்து இந்த நிரலிகள் படுகின்றன. இந்த மொழி முதலில் **செயற்கை அறிவு**த் துறையில் (செயற்கை அறிவு - artificial intelligence) ஆராய்ச்சிக்காகப் பயன் படுத்தப் பட்டது. இப்பொழுது, இது மற்ற கணிப்பியல் மொழி போலவே பல பயன்பாட்டுக்கும் உதவி உள்ளதாக இருக்கின்றது.  
ஒவ்வொரு மொழிக்கும் ஒரு அடிப்படைக் கோட்பாடு உண்டு. எடுத்துக் காட்டாக, ஜாவா (Java) என்ற கணினி மொழி செயல்முறை (procedural programming) என்ற அடிப்படைக் கருத்தை வைத்து உருவாக்கப் பட்டுள்ளது. அது போலவே, புரோலாக் என்ற மொழியும் ஏரணம் (logic) என்பதை
அடிப்படைக் கோட்பாடாக வைத்து உருவாக்கப் பட்டது. எனவே, புரொலாக் ஒரு ஏரண மொழியாகும். கீழே ஒரு எடுத்துக்காட்டு கொடுக்கப் பட்டுள்ளது.  
விளக்கங்கள் /* */ என்ற குறியீட்டுக்குள் கொடுக்கப்பட்டுள்ளன.  
(அ) **மாட்டுக்கு நான்கு கால்கள்.** /*விளக்கம்: அதாவது, ஒவ்வொரு மாட்டுக்கும் நான்கு கால்கள். */  
(ஆ) **செவலை என்பது எங்கள் மாடு.**  
வினவல்: **செவலைக்கு எத்தனை கால்கள்?** /* விளக்கம்: வினவல் - query */  
இந்தக் கேள்விக்கு விடை காண, ஏரணத்தில் ஒரு சிறு நிரலி எழுதலாம்.
கீழே உள்ள நிரலியில், இரண்டு வரிகள் உள்ளன. ஒவ்வொரு வரியும் ஒரு (ஏரணத்தில் எழுதப்பட்ட) தொடர் (statement) ஆகும். ஒவ்வொரு வரியையும் வலது புறத்தில் இருந்து இடது புறமாகப் படிக்க வேண்டும்.  
<blockquote>
/* ஏரண நிரலி #1 - logic program #1 */  
/* விளக்கம்: X என்பது ஒரு மாடு என்று வைத்துக்கொண்டால், X-க்கு 4 கால்கள். */  
(1) **கால்கள்(X , 4) :- மாடு(X).**  
/* செவலை என்பது ஒரு மாடு. */  
(2) **மாடு(செவலை).**
</blockquote>  
வினவல்: **?கால்கள்(செவலை, Y)** /* செவலைக்கு Y கால்கள் என்றால், Y-இன் மதிப்பு என்ன? */  
இந்த வினவலுக்கு விடைகாண, **கால்கள்(செவலை,Y)** என்பதை எடுத்து நிரலியில் ஒவ்வொரு வரியின் இடப் புறத்திலும் பொறுத்திப் பார்க்க வேண்டும். நிரலியில் இரண்டு வரிகள் உள்ளன. (2)-ஆம் வரியில் **கால்கள்(செவலை, Y)** என்பது பொருந்தாது. ஆனால், இது (1)-ஆம் வரியில் பொருந்துவதுபோல் தெரிகின்றது. X-இன் மதிப்பு **செவலை** என்றும், Y-இன் மதிப்பு **4** என்று வைத்துக் கொண்டால், **கால்கள்(X, 4)** என்பதற்கும் **கால்கள்(செவலை, Y)** என்பதற்கும் முழுப் பொருத்தம் கிடைத்து விடுகின்றது. அதாவது, **கால்கள்(X, 4)** என்பது **கால்கள்(செவலை, 4)** என்றும், **கால்கள்(செவலை, Y)** என்பது **கால்கள்(செவலை, 4)** என்றும் ஆகின்றன. பொருத்தம் நிறைவடைகின்றது. இதில், நமக்குக் கிடைத்த சமன்பாடுகள்: X = **செவலை**, Y = **4**. **செவலை**க்கு 4 கால்களானால், (1)-ஆம் வரியின் படி, **செவலை** ஒரு மாடு என்று மெய்ப்பிக்க வேண்டும். அதாவது, **மாடு(செவலை)** என்பதை அடுத்த வினவலாக எடுத்துக் கொண்டு, நிரலியில் அது எங்கே பொருந்துகின்றது என்று பார்க்க வேண்டும். **மாடு(செவலை)** என்பது (1)-ஆம் வரியின் இடப்புறத்தில் பொருந்த வில்லை. ஆனால், நல்ல வேளையாக, (2)-ஆம் வரியில் பொருந்துகின்றது. இத்துடன் நிரலியின் செயல்பாடு (execution) முடிவடைகின்றது. நமக்கு வேண்டிய விடை முன் கூறிய சமன்பாட்டில் உள்ளது: X = செவலை, Y = 4. அதாவது, **கால்கள்(செவலை, Y)**-யில், Y-இன் மதிப்பு 4. அதாவது, செவலைக்கு 4 கால்கள்.  
ஒரு ஏரண நிரலி (logic program) இவ்வாறுதான் செயல்படுத்தப் படுகின்றது. மேல் கண்ட நிரலியை ஆங்கிலத்தில் எழுதினால், புரோலாக் நிரலி கிடைக்கும்:  
<blockquote>
(1) legs(X,4) :- cow(X).  
(2) cow(sevalai).
</blockquote>  
Query: ?-legs(sevalai,Y)  
எனவே, புரோலாக் (Prolog) என்ற இந்த மொழியின் அடிப்படைக் கோட்பாடுகள் (அதாவது, வேர்கள் - roots) ஏரணத்தில் உள்ளது சொல்லலாம். மேலும் பல பிற நிரலாக்க மொழிகளைப் (programming languages) போலன்றி, புரோலாக் மொழியில் ஒவ்வொரு தொடரும் (தொடர் - statement ) **மெய்** என்ற தன்மை உடையது. எடுத்துக் காட்டாக, மேலே குறிப்பிடப்பட்டுள்ள ஏரண நிரலி #1 -இல் , **மாடு(செவலை)** என்பது ஒரு மெய்யான கூற்று. அதாவது, **செவலை என்பது ஒரு மாடு** என்பது உண்மை. இது போல, புரோலாக் மொழியில் ஒவ்வொரு தொடரும் ஒரு மெய்யான கூற்று; அதாவது, மெய்யான ஒரு கூற்றைச் சாற்றுகின்றது (சாற்று - declare). அதனால், புரோலாக் மொழியை ஒரு **மெய் சாற்று மொழி** (declarative language) என்று அழைக்கலாம். இந்த நிரலியைச் செயலாற்ற (செயலாற்று - execute ) வேண்டுமாயின், நாம் ஒரு வினாவைக் கேட்க வேண்டும். இந்த வினா **வினவல்** (query ) என்று அழைக்கப் படும். எனவே, நாம் ஒரு வினவலைக் கேட்டால், புரோலாக் அந்த வினவலை ஏற்றுக் கொண்டு அதற்கு விடை கண்டு பிடிக்க முயற்சி செய்கின்றது. முயற்சியில் வெற்றி பெற்றால், விடை கொடுக்கப்படும். முயற்சி தோல்வி அடைந்தால், **தோல்வி** என்று பதில் கொடுக்கப் படும். ஏரண நிரலி #1 -இல், **?கால்கள்(செவலை, Y)** என்ற வினவலுக்கு விடை கிடைத்துள்ளது; அதாவது Y=4 என்பதுதான் அந்த விடை. ஆனால், **?கால்கள்(கன்றுக்குட்டி , Y)** என்ற வினவல் வெற்றி அடையாது. எனவே,**தோல்வி** என்று பதில் கிடைக்கும்.  
புரோலாக் என்ற இந்த ஏரண நிரலாக்க மொழி (logic programming language) முதலில் அலைன் கோல்மரார் (Alain Colmerauer) என்பவரின் குழுவால் பிரான்சிலுள்ள மார்செல் (Marseille) என்ற ஊரில் 1970களின் முற்பகுதியில் உருவாக்கப்பட்டது, மேலும் முதல் புரோலாக் அமைப்பு 1972 இல் அலைன் கால்மராவர் மற்றும் ஃபிலிப் ரௌசல் ஆகியோரால் உருவாக்கப்பட்டது.  
முதல் தர்க்க நிரலாக்க மொழிகளில் புரோலாக் ஒன்றாகும், மேலும் அதுவே அதுபோன்ற மிகவும் பிரபலமான மொழிகளில் ஒன்றாக இன்றும் விளங்குகிறது. மேலும் அதனுடன் பல இலவச மற்றும் வணிகரீதியான செயல்படுத்தல்களும் கிடைக்கின்றன. தொடக்கத்தில் இயல்பான மொழி செயலாக்கத்தையே குறிக்கோளாகக் கொண்டிருந்த இந்த மொழி, அப்போதிலிருந்து தேற்ற நிரூபணம், வல்லுநர் முறைமைகள், கேம்கள், தானியக்க பதிலளிப்பு முறைமைகள், மெய்ப்பொருள் மூல ஆராய்ச்சி மற்றும் நுண்ணிய கட்டுப்பாட்டு முறைமைகள் போன்ற பிற பகுதிகளுக்கும் விரிவாக்கப்பட்டது. தற்கால புரோலாக் சூழல்கள் வரைவியல் பயனர் இடைமுகங்கள், நிர்வாக மற்றும் நெட்வொர்க் பயன்பாடுகள் உருவாக்கத்தை ஆதரிக்கின்றன.