Tcl լեզվում պրոցեդուրները (կամ ֆունկցիաները) սահմանվում են proc
հրամանի միջոցով։ Այն ստանում է երեք արգումենտ. ա) սահմանվող պրոցեդուրայի անունը, բ) արգումենտների ցուցակը, և գ) մարմինը։ Օրինակ, տրված x
և y
թվերից մեծը որոշող ֆունկցիան կարելի է սահմանել հետևյալ կերպ.
proc max { x y } { if { $x > $y } then { return $x } return $y }
Կամ, եթե չենք ուզում օգտագործել if
հրամանը.
proc max { x y } { return [expr {$x > $y ? $x : $y}] }
Այս երկու օրինակներում էլ return
հրամանն օգտագործված է ֆունկցիայի մարմնից արժեք վերադարձնելու համար։ Tcl պրոցեդուրաները կառուցված են այնպես, որ եթե նրա մարմնում, կամ կատարման որևէ ճյուղում, որը բերում է պրոցեդուրայի ավարտի, բացակայում է return
հրամանը, ապա ֆունկցիայի վերադարձրած արժեք է համարվում դրա կատարման ժամանակ վերջին արտահայտության հաշվարկված արժեքը։ Սա հաշվի առնելով, կարող են նախորդ օրինակը գրել առանց return
հրամանի.
proc max { x y } { expr {$x > $y ? $x : $y} }
Եթե պրոցեդուրան սպասում է միայն մեկ արգումենտ, ապա սահմանման ժամանակ այդ միակ ֆորմալ արգումենտի անունը կարելի է գրել առանց ձևավոր փակագծերի։ Օրինակ, Սահմանենք մի պրոցեդուրա, որը ստուգում է տրված բառի պալինդրոմ լինելը.
proc palindrom? str { string equal $str [string reverse $str] }
Իսկ եթե արգումենտների ցուցակում վերջին կամ միակ արգումենտի անունը args
է, ապա նրա միջոցով, որպես ցուցակ, պրոցեդուրայի մարմնին են փոխանցվում կամայական թվով արժեքներ։ Օրինակ, ահմանենք մի ֆունկցիա, որը հաշվում է երկու և ավելի թվերի թվաբանական միջինը.
proc average { a b args } { set sum [expr {$a + $b}] foreach n $args { set sum [expr {$sum + $n}] } return [expr {$sum / (2 + [llength $args])}] }
Ահա նաև այս պրոցեդուրայի օգտագործման մի քանի օրիակ.
average 1.1 2.2 ; # => 1.6500000000000001 average 1.1 2.2 5.5 4.4 3.3 ; # => 3.3 average 1.2 2.3 3.4 ; # => 2.3000000000000003
proc
հրամանը հնարավորություն է տալիս սահմանել նաև լռելությոն (default) արժեքով արգումենտներ ունեցող պրոցեդուրաներ։ Այդ դեպքում արգումենտը տրվում է երկու տարրերի ցուցակի տեսքով, որոնցից առաջինը ֆորմալ արգումենտի անունն է, իսկերկրորդը՝ նրա լռելության արժեքը։ Օրինակ, սահմանենք մի ֆունկցիա, որը վերադարձնում է \(y\) թվի \(n\) աստիճանի արմատը՝ \(\sqrt[n]{y}\), եթե \(n\)-ը տրված չէ, այն համարվում է \(2\)։
proc root { y {n 2} } { expr exp(log($y) / $n) }
Ահա կիրառման օրինակներ.
root 1024 ; # => 32.0 root 1024 5 ; # => 4.0 root 1024 10 ; # => 2.0
No comments:
Post a Comment