(interpretr se pusti pomoci tclsh a je v standardni distribuci slakwaru)
Typy a vyhodnocovani:
Protoze tcl je lispu hodne podobne jen rychle:
Tcl ma jediny datovy typ a tim je string. Jeho cteni a zapisovani je jasne.
Vyhodnocovani probiha tak ze se rozdeli na castni podle mezer a prvni
je jmeno funkce a ostatni jsou parametry(tedy trochu podobne jako lisparsky
list nebo kdyz shell pousti program):
blb 1 2 3Vola funkci blb z parametry 1,2 a 3.
expr 1 + 2 + 3je volani funkce expr ktera je soucasti standardni tcl knihovny a vyhodnocuje vyrazy. Takze matematika tu vypada lidsky ale zase je celkem nerozsiritelna. Ty cisla jsou stringy a i string se vrati. Pouze funkce expr si ty stringy prevadi do cisel. Navratova hodnota bude string 6
Parametry se uz nijak nevyhodnocuji narozdil od lispu. Pri rozsekavani na casti se deje nekolik zajimavych prevodu:
bere " tedy "1 2" je jeden string:1 2 a tudiz se preda jako jeden parametr. treba:
puts "hello word!"dostane jen jeden parametr a vypise i vrati hello word.
Pri cteni dochazi take k expanzi promenych. Promena zacina $ jako v shellu. Nastavovani se dela pomoci set:
set ahoj 10#hodnota promene ahoj je ted string 10 puts $ahoj vypise 10.No ale co kdybychom chteli promeny priradit treba vysledek volani expru Protoze se parametry nevyhodnocuji jako v lispu nemuzeme jako parametr normalne hodit volani funkce. Je na to figl. Pokud ctecka narazi na [ vyhodnoti retezec vnich jako zvlastni script a dosadi misto toho vysledek. To umoznuje vnorovani forem. Lispovske:
(+ 1 (- 2 3))
muzeme prepsat do tcl:+ 1 [- 2 3]
set ahoj [expr 1 + 2 + 3 + 4](tady uz vidi jak se syntaxe zamotava oproti lispu.) [ jsou vlastne opakem lispovsky quote tedy ' . Misto aby vyhodnoceni zakazovaly ho dokonce prikazuji.
Take se berou backshlase jako v cecku. A posledni konstrukce je ze kdyz narazi na { funguje to stejne jako " s tim rozdilem ze tam muzou byt vnorene {} a bere i entery
puts {Ja jsem jeden parametr a pored jsem to ja {i tohle} a stale} vypise: Ja jsem jeden parametr a pored jsem to ja {i tohle} a staleTo se hodi pri:
while podminka kodvola expr na podminku a dokud vychazi nenulovy vysledek vola tcl interpretr na kod:
set $p 1 while {$p>10} {set p [$p+1]}Provede nejaky vypocet. Je to to same jako:
while "$p>10" "set p [$p+1]" nebo: while $p>10 "set p [$p+1]"Takze tady vidite jak predavani funguje a ze rizeni programu je stejne jako v lispu udelano pomoci volani funkci a predavani kodu.
Jenom si musite dat bozor na:
if {i>10} { kod }jsou dva oddelene prikazy-prvni if {i>10} a druhy volani funkce se jmenem " kod " coz asi neni to co chcete.
A pokud jste davali pozor v lispovi uz vite ze ted muzu rict:
to je vse pratele!
Zakladni funkce tcl knihovny
Popisu opravdu NAPROSTE ZAKLADY ostatni si muzete precist v moc preknem
manualu co je v postcriptu a da se downloadnout ze sorry.vse.cz
Funkce
proc jmeno {parametry} {kod}nadefinuje novou funkci v tcl.
return hodnotaco to asi muze delat...hmmm
set jmeno hodnotanastavi jmeno na hodnotu
unset jmenorusi promenou
expr vyrazvyhodnoti vyraz. Podporuje vsechny bezne ceckove figly:< < nebo treba sin
set slovnik(pocitac) computer set slovnik(mys) mouseJak vidite jsou to vlastne normalni promene z jmenem slovnik(pocitac) apod. Takze nic noveho. Je tu ale nekolik funkci na praci s nimi.
Programy v tcl nemuzou byt tak odolne vuci chybam a robusni jako v lispovi proste CLOS tedy objektovou nadstavbu lispu v tcl nevykouzlite. Hodne lispovskych konstrukci proste v tcl nejde. Ale presto je to jazyk mnohem lepsi nez treba basic a jde v nem hodne.
Jednou tu popisu tk coz je opravdu pekna nadstavba.
Tento soubor je soucasti rozsahle sbirky skolicek na http://www.ucw.cz/~hubicka/skolicky
Take si muzete prohlidnout jeji puvodni textovou podobu
Nebo mi mailnout na hubicka@ucw.cz
Copyright (C) Jan Hubicka 1995