# புரொலாக்

## சொற்றொடர் இலக்கணம் & சொற்பொருள்

"செவலை என்பது ஒரு மாடு" என்பதைப் பல வகையாகக் குறிக்கலாம். எடுத்துக்காட்டாக, செவலை-மாடு அல்லது (செவலை)மாடு என்று குறிக்கலாம். ஏரணத்தில் மாடு(செவலை) என்று குறிக்கப்படும். எனவே, புரோலாக் மொழியிலும் மாடு(செவலை) என்றே குறிக்கப்படுகின்றது. (மாடு(செவலை) என்பதைச் செவலை ஒரு மாடு என்று படித்துக் கொள்ள வேண்டும்.) செவலை என்பது ஒரு குறிப்பிட்ட மாட்டைக் குறிக்கின்றது. அதுபோலவே, "செவலை என்பது ஒரு ஆடு" என்பதை ஆடு(செவலை), "செவலை என்பது ஒரு பன்றி" என்பதை பன்றி(செவலை) என்றும் குறித்துக் கொள்ளலாம். இனி, "X என்ற ஒன்று மாடு" என்பதை மாடு(X) என்றும், "X என்ற ஒன்று பன்றி" என்பதை பன்றி(X) என்றும் குறிக்கலாம். "ஒவ்வொரு மாட்டுக்கும் நான்கு கால்கள்" என்பதைக் குறிக்க "X என்பது ஒரு மாடு என்று ஆனால், X-க்கு 4 கால்கள்" என்று மாற்றி எழுதி, பிறகு "மாடு(X) என்பது உண்மையானால் கால்கள்(X,4)" என்று குறிக்கலாம். இதையே ஏரணத்தில் "மாடு(X) => கால்கள்(X,4)" என்று குறிப்பர். இதைக் கொஞ்சம் மாற்றி, "கால்கள்(X,4) <= மாடு(X)" என்று குறிக்கலாம். புரோலாக் மொழியில் இதை "கால்கள்(X,4) :- மாடு(X)" என்று குறிப்பர். இதை, "X-க்கு 4 கால்கள், X என்பது மாடானால்" என்று படிக்க வேண்டும். இத்துடன் செவலை என்பது ஒரு மாடு என்பதையும் சேர்த்து, ஒரு புரோலாக் நிரலி (program) தமிழில் எழுதலாம்.  
<blockquote>
**கால்கள்(X,4) :- மாடு(X).**  
**மாடு(செவலை).**  
இதுவே ஆங்கிலத்தில்:  
**legs(X,4) :- cow(X).**  
**cow(sevalai).**
</blockquote>  
இது போலவே, இன்னொரு நிரலியையும் எழுதலாம்:  
<blockquote>
/* X என்பவர் Y என்பவரின் தாத்தா; X என்பவர் Z-இன் தந்தை என்றும், Z என்பவர் Y-இன் தந்தை என்றும் ஆனால். */  
**தாத்தா(X,Y) :- தந்தை(X,Z), தந்தை(Z,Y).**  
/* இடும்பன் அறிவுமணியின் தந்தை */  
**தந்தை(இடும்பன், அறிவுமணி).**  
/* அறிவுமணி எழினியின் தந்தை */  
**தந்தை(அறிவுமணி,எழினி).**
</blockquote>  
மேற்கண்ட நிரலியில், தாத்தா, தந்தை என்பவை உறவு முறையைக் (relation) குறிக்கும் சொற்கள். இவற்றை நாம் புரோலாக் மொழியில் தொடர்பு முறை என்று சொல்கின்றோம். அதாவது, **தந்தை(இடும்பன், அறிவுமணி)** என்பதில், **தந்தை** என்பது இடும்பன் என்பவர்க்கும் அறிவுமணி என்பவர்க்கும் உள்ள தொடர்பைக் குறிப்பது. அது போலவே, **கால்கள்(X,4)** என்பதில், **கால்கள்** என்பது X-க்கும் 4-க்கும் உள்ள தொடர்பைக் குறிப்பது. எனவே, **தாத்தா**, **தந்தை**, **கால்கள்** ஆகியன தொடர்புகள் (relations) என்றழைக்கப் படும்.  
புரோலாகில், நிரல் தர்க்கமானது தொடர்புகளாகக் குறிப்பிடப்படுகின்றன, இந்த தொடர்புகளின் மீது ஒரு *வினவலை* நிகழ்த்துவதன் மூலம் ஒரு கணக்கீடு தொடங்கப்படுகிறது. தொடர்புகளும் வினவல்களும் புரோலாகின் ஒற்றைத் தரவு வகையான *உறுப்பின்* மூலம் கட்டமைக்கப்படுகின்றன. தொடர்புகள் *உட்கூறுகளால்* (க்ளாஸ்) வரையறுக்கப்படுகின்றன. ஒரு வினவல் கொடுக்கப்பட்டால், புரோலாக் எஞ்சின் புறம்பான வினவலின் ஒரு தீர்மான நிராகரிப்பைக் கண்டுபிடிக்க முயற்சிக்கும். புறம்பான வினவல் நிராகரிக்கப்படலாம் எனில், அதாவது உட்கூறுகளினை ஒன்றாக்கும் மற்றும் புறம்பான வினவலைக் கொண்டுள்ள ஒற்றைத் தொகுப்பை தவறு எனக் குறிக்கும், அனைத்து எளிய மாறிகளுக்குமான குறிப்பிடுதல் ஒன்று கண்டறியப்படுகிறது, கண்டறியப்பட்ட குறிப்பிடுதல் பயன்படுத்தப்பட்டபிறகான உண்மையான வினவலே நிரலின் தர்க்கரீதியான விளைவு என அது பின்பற்றுகிறது. இதனால் புரோலாக் (மற்றும் பிற தர்க்க நிரலாக்க மொழிகள்) குறிப்பாக தரவுத்தளம், குறிப்பியல் கணிதவியல் மற்றும் மொழி பாகுபடுத்திப் பயன்பாடுகள் ஆகியவற்றுக்கு பயன்மிக்கதாகிறது. புரோலாக் தூய்மையல்லாத பயனிலைகளை அனுமதிப்பதால், குறிப்பிட்ட சிறப்புப் பயனிலைகளின் உண்மை மதிப்பைச் சொதித்தல் என்பது, ஒரு மதிப்பை திரையில் அச்சிடுதல் போன்ற சில குறிப்பிடத்தக்க பக்க விளைவுகளை உடையதாக இருக்கலாம். இதனால், தர்க்கரீதியான நெறிமுறை வசதிப்படாத போது, நிரலாக்குநர் ஓரளவுக்கு மரபான கட்டளையிடு நிரலாக்கத்தைப் பயன்படுத்த முடிகிறது. இதில் "தூய புரோலாக்" என்னும் முழுக்க முழுக்க தர்க்கரீதியான துணைக்குழு உள்ளது, மேலும் எண்ணற்ற கூடுதல் தர்க்க அம்சங்களையும் கொண்டுள்ளது.