கணினி அறிவியல் - நிரலாக்க மொழியில் செயற்கூறுகள் | 12th Computer Science : Chapter 1 : Problem Solving Techniques : Function
நிரலாக்க மொழியில் செயற்கூறுகள்
செயற்கூறு என்பது குறிமுறையின் ஒரு அலகு ஆகும். இது பெரும்பாலும்
ஒரு பெரிய குறிமுறை கட்டமைப்பில் வரையறுக்கப்படும். குறிப்பாக, குறிமுறையின் தொகுப்பைக்
கொண்டிருக்கும். செயற்கூறானது பல வகை உள்ளீடுகளான மாறிகள் மற்றும் கோவைகளின் மீது செயல்பட்டு
நிலையான வெளியீட்டைத் தருகிறது.
a:=(24) என்ற உதாரணத்தைக் கவனிக்கவும். a:=(24) என்பது கோவையைக் கொண்டுள்ளது ஆனால் (24) என்பது கோவையல்ல. மாறாக, இது ஒரு செயற்கூறு வரையறை ஆகும். வரையறைகள், மதிப்புகளைப் பெயருடன் பிணைக்கின்றன. இங்கு, 24 என்ற மதிப்பு ‘a' என்ற பெயருடன் பிணைக்கின்றது. வரையறைகள் கோவைகள் அல்ல. அதே நேரத்தில் கோவைகளை வரையறை எனக் கருதக் கூடாது. வரையறைகள் தனித்தன்மையான தொடரியல் தொகுதிகளைக் கொண்டதாகும். வரையறைகள் உள்ளமைவாக உள்ள கோவைகளைக் கொண்டதாகவோ அல்லது நேர்மாறாகவும் இருக்கலாம்.
2. அளபுருக்கள் மற்றும் செயலுருபுக்கள்
அளபுருக்கள் என்பது செயற்கூறு வரையறையில் உள்ள மாறிகள் ஆகும்.
செயலுருபுக்கள் என்பது செயற்கூறு வரையறைக்கு அனுப்பப்படும் மதிப்புகள் ஆகும்.
1. தரவு வகை இல்லா அளபுருக்கள்
செயற்கூறு வரையறைக்கு ஓர் எடுத்துக்காட்டைக் காணலாம்:
(requires: b>=0)
(returns: a to the power of b)
let rec pow a b:=
if b=0 then 1
else a * pow b (a-1)
மேலேயுள்ள செயற்கூறு வரையறையில் 'b' என்ற மாறி அளபுரு ஆகும்.
மாறி 'b'க்கு அனுப்பப்படும் மதிப்பானது செயலுருபு ஆகும். செயற்கூறின் முன் நிபந்தனை
(requires) மற்றும் பின் நிபந்தனை (return) கொடுக்கப்பட்டுள்ளது. நாம் எந்த தரவினத்தையும்
குறிப்பிடவில்லை என்பதைக் நினைவில் கொள்க. சில மொழிகளின் நிரல் பெயர்ப்பி இவ்வகை சிக்கல்களை
நிரல் நெறிமுறைப்படி சரி செய்கிறது. ஆனால் சில நிரல் பெயர்ப்பிக்கு தரவு வகையைக் குறிப்பிடுவது
கட்டாயமாகும்.
மேலே உள்ள செயற்கூறு வரையறையில், if கோவை, then கிளைக்கு மதிப்பு
1 யைத் திருப்பி அனுப்பினால், தரவு வகை (data type) விதிப்படி if கோவை முழுவதுமே
'int' தரவு வகைக் கொண்டிருக்கும். if கோவையின் தரவு வகை int ஆக இருப்பதால் செயற்கூறின்
திருப்பி அனுப்பும் மதிப்பும் int ஆக இருக்கும். 'b' யின் மதிப்பு சுழியத்தோடு = செயற்குறியுடன்
ஒப்பீடு செய்யப்படுகிறது. அதனால் யின் தரவுவகையும் 'int' ஆகும். செயற்குறியுடன் 'a' யின் மதிப்பு மற்றொரு கோவையோடு
பெருக்குத்தொகையைக் கணக்கிடுவதால் ,a-யின் வகையும் int ஆகும்.
2. தரவு வகையுடன் கூடிய அளபுரு
சில காரணங்களுக்காக, இப்பொழுது நாம் அதே செயற்கூறுவரையறை தரவு
வகையுடன் எழுதலாம்:
(requires: b> 0)
(returns: a to the power of b )
let rec pow (a: int) (b: int) : int :=
if b=0 then 1
else a * pow b (a-1)
'a' மற்றும் ‘b’ தரவு வகை குறிப்பு (type annotations) எழுதும்
போது, அடைப்புக்குறிக்குள் ( ) அவசியமானது ஆகும். பொதுவாக, இந்த குறிப்புகளை நாம் விட்டுவிடலாம்,
ஏனெனில், நிரல்பெயர்ப்பி இவற்றை அனுமானிப்பது மிகவும் எளிது. முன்பெல்லாம் நாம் வெளிப்படையாகவே
தரவுவகைகளை எழுதுவோம். எந்தவித அர்த்தமும் இல்லாத தரவு வகை பிழைச் செய்தியைப் பெறும்
போது, இது மிகவும் பயனுள்ளதாகும். தரவு வகைக்கு வெளிப்படையாக தரவுவகை குறிப்பு எழுதுவது
பிழைச் செய்தியைத் திருத்தம் செய்வதற்கு பயனுள்ளதாக இருக்கும். செயற்கூறை வரையறுப்பதாற்கான
தொடரியல், கணித பயன்பாட்டோடு நெருக்கம் கொண்டது. வரையறை let என்ற சிறப்புச் சொல்லோடு
அறமுகப்படுத்தப்படுகிறது. அதனைத் தொடர்ந்து செயற்கூறின் பெயர் மற்றும் அதனுடைய செயலுருபுகள்
பிறகு செயலுருபுவைக் கணக்கீடு செய்யும் வாய்ப்பாடு= குறிக்குப் பிறகு எழுத வேண்டும்.
தற்சுழற்சி செயற்கூற்றை வரையறுக்க விரும்பினால் let-க்குப் பதிலாக let rec என்று பயன்படுத்த
வேண்டும்.
செயற்கூறு வரையறையின் தொடரியல்:
let rec fn al a2 ... an := k
இங்கு ‘fn' என்பது ஒரு மாறி ஆகும். இது செயற்கூறின் பெயரைக்
குறிக்கும். குறிப்பெயராகும். 'a1' முதல் 'an' வரை உள்ள மாறிகள் அளபுருக்களைக் குறிக்கும்
குறிப்பெயராகும். 'fn' என்பது தற்சுழற்சி செயற்கூறினால் rec என்ற சிறப்புச் சொல் தேவை,
இல்லையெனில் அதை விட்டு விடலாம்.
குறிப்பு
தன்னைத்
தானே அழைத்துக் கொள்ளும் செயற்கூறு வரையறைக்கு தற்சுழற்சி செயற்கூறு என்று பெயர்.
எடுத்துக்காட்டாக, உள்ளிடப்பட்ட எண் ஒற்றைப்படை எண்ணா அல்லது
இரட்டைப்படை எண்ணா என சோதிக்கும் எடுத்துக்காட்டைக் காண்போம்.
(requires: x>= 0)
let rec even x : =
x=0 || odd (x-1)
return 'even'
(requires: x>= 0)
let odd x :=
x<>0 && even (x-1)
return ‘odd’
X -> y
x1 -> x2 -> y
x1->. ..- > xn -->y
'X' மற்றும் 'y' மாறிகள் செயற்கூறு வகைகளைக் குறிக்கும். x ->
y என்ற செயற்கூறு வகையானவை 'x' வகையின் உள்ளீட்டைப் பெற்று y வகையின் வெளியீட்டைத்
திருப்பி அனுப்பும். அதே சமயம் x1 –> x2 -> y என்ற செயற்கூறு வகையானது இரண்டு உள்ளீட்டுகளைப் பெற்று,
முதல் உள்ளீட்டின் வகை ‘x1' ஆகும், இரண்டாவது உள்ளீட்டின் வகை 'x2' ஆகும். திருப்பி
அனுப்பும் வெளியீட்டின் வகை 'y' ஆகும். x1 -> ... -> xn -> yயில் n அளபுருக்களின் உள்ளீட்டு வகை X ஆகும்.
வெளியீட்டின் வகை 'y' ஆகும்.
குறிப்பு
அனைத்து
செயற்கூறுகளும் static வரையறையாகும். dynamic செயற்கூறு வரையறைகளே கிடையாது.