i i “831-Batagelj-LOGO” — 2010/5/28 — 9:19 — page 1 — #1 i i i i i i List za mlade matematike, fizike, astronome in računalnikarje ISSN 0351-6652 Letnik 14 (1986/1987) Številka 3 Strani 162–169 Vladimir Batagelj, Boris Horvat in Tomaž Pisanski: LOGO NA RAČUNALNIKU SPECTRUM – SOLI/LCSI SINCLAIR LOGO Ključne besede: računalništvo, programiranje, programski jeziki, logo. Elektronska verzija: http://www.presek.si/14/831-Batagelj.pdf c© 1986 Društvo matematikov, fizikov in astronomov Slovenije c© 2010 DMFA – založništvo Vse pravice pridržane. Razmnoževanje ali reproduciranje celote ali posameznih delov brez poprejšnjega dovoljenja založnika ni dovo- ljeno. LOGO NA RACUNALNIKU SPECTRUM - SOLI/LCSI Sinclair Logo uvod Med jeziki, namenjenimi za uvod v programiranje, zasluži prav gotovo posebno pozornost jezik logo. Želvja grafika in možnost krmiljenja "igrač- robotov" omogočata uvajanje v programiranje že v prVih razredih osnovne šole in celo v vrtcu. zato je logo po krivici dobil sloves programskega jezika "za otroke". Kratek uvod v logo je pripravil Gregor Pavlič v knjigi "Z računalnikom v matematiko" (DZS). Tolmače za logo najdemo na večini osebnih računalnikov, tudi na ZX Spectrumu in Commodore-64. žal pa zanje ni pripravljenih slovenskih navodil. Zato smo se pri Preseku odločili, da pripravimo kratka pregleda praukazov jezika logo na obeh računalnikih. V tej številki objavljamo priročnik za logo na ZX Spectrum. Za vsak ukaz so podani naslednji podatki: - črka F na začetku vrstice označuje, da ukaz vrača neki objekt kličočemu ukazu (v jedru ukaza je ukaz OUTPUT); če črke F ni, se ukaz obnaša kot pravi ukaz (spreminja okolje), - polno ime ukaza, - število in vrsta vhodov ukaza (parametrov), - okrajšano ime ukaza (če obstaja), - kratek opis delovanja ukaza, - znaki +, ., o in - na koncu vrstice primerjajo logo na obeh računalnikih + ukaz je enak za oba računalnika, • obstaja enakovreden ukaz na drugem računalniku pod drugim imenom, o ukaz lahko na drugem računalniku enostavno sestavimo iz obstoječih ukazov, na drugem računalniku tega ukaza ni. Ukazi so razdeljeni smiselno v skupine, ki se za oba računalnika v glavnem ujemajo. Posamezni ukaz lahko nastopa tudi v več skupinah. Logo za računalnik Sinclair Spectrum so razvili pri SOLI/LeSI (Les Systems d 'Ordinateur Logo Internationale / Logo Computer Systems Inc.) in predstavlja razmeroma popolno narečje jezika logo. Omogoča delo tako s kasetnikom kot tudi z m~krotračnikom ter uporabo tiskalnika. Tolmač za logo vnesemo s kasetnika v računalnik z ukazom LOAD "logo" oziroma z mikrotračnika z ukazom LOAD ."m"; 1; "logo" 162 Ko je program vnešen, se pojavi na zaslonu napis: WELCOME TO SINCLAIR LOGO (c) SOLI/LCSI 1984 VER 1.6 Na koncu spodnje vrstice je stalno podatek o načinu vnosa znakov: 1 male črke C - velike črke E - način E Na začetku smo v osnovnem (sprotnem) načinu dela in lahko začnemo ukazovati. Pri tem sta nam v pomoč pozornika: ? označuje osnovni (sprotni) nivo > - označuje način TO (sestavljanje novih ukazov) kadar pa smo v urejevalniku, je v spodnji vrstici napis : LOGO EDITOR (c) SOLI / LCSI Logo zapustimo z ukazom BYE, vanj pa se ponovno vrnemo z basiškim ukazom RUN ; seveda medtem ne smemo pokvariti dela pomnilnika , v katerem se naha ja logo. Osnove in posebnosti Logo pozna naslednje vrste objektov: besede "a3 25 TRUE " - seznami [] [FO 50 [2R 5B]] - cela števila (-99999999 •. 99999999) - realna števila najmanjše: 1E-39 predela v 0, 2E-39 predela narobe, 1E-38 je v redu največje : okrog 1.7014118346E+38 Barve določamo z njihovimi številkami , ki so enake kot v basicu: o - črna 4 - zelena 1 - modra 5 - sinja 2 - rdeča 6 - rumena 3 - vijoličasta 7 - bela Kote merimo v stopinjah. Z znakom E bomo v nadaljevanju označevali znak za prehod v način E (Gaps Shift &Symbol Shi f t ) , s Cs pa tipko Caps Shi f t . O. Urejanje ukazov EDIT ime Cs 5 Cs 6 Cs 7 Cs 8 ED < - > < I > < , > < - > začni urejanje ukaza ime en znak levo naslednja vrstica prejšnja vr s t i ca en znak desno 1b3 E Cs 5 E Cs 6 E Cs 7 E es 8 E B E E E Y E R E P E N E C TO ime TO ime END E < - > E < I > E < t > E < - > (Begin) (End) (Yield) (Resume) (Previous) (Next) (Complete) parametri začetek vrstice konec zaslona začetek zaslona konec vrstice začetek besedila konec besedila zbriši do konca vrstice in spravi vrini shranjeni del vrstice prejšnja stran naslednja stran zapusti ukaz EDIT prekini urejanje urejanje spremenljivk začni definiranje ukaza končaj definiranje ukaza v načinu TO 1. želvja grafika Na zaslon je postavljen koordinatni sistem (x,Y) , -1282x2127, -882Y287 BACK n BK nazaj n korakov + r BACKGROUND BG barva podlage * CLEAN počisti zaslon, pusti želvo * CLEARSCREEN es počisti zaslon, želva v izhodišče * DOT [x Y ] pika na (x.y ) , pusti želvo o rENCE omeji želvo na zaslon * rORWARD n ro naprej n korakov + F HEADING smer želve + HIDETURTLE HT skrij; ne riše želve, sled pa + HOME želva v izhodišče + LErT n LT zasuk za n stopinj v levo + r PENCOLOUR PC barva sledi * PENDOWN PD spusti pero; želva pušča sled + PENERASE PE želva briše (dele) sledi, + čez katere gre PENREVERSE PX želva riše in briše (dele) sledi, čez katere gre PENUP PU dvtgnr pero; želva ne pušča sledi + F POSITION P~S položaj (mesto) želve * RIGHT n RT obrni n stopinj v desno + r SCRUNCH razmerje enot na oseh SETBG n postavi barvo podlage na n * SETBORDER n SETBR postavi barvo okvirja na n SETHEADING n SETH določi smer želve (absolutno) + SETPC n določi barvo črnila na n * SETPOS [x y premik v točko (x..y ) * SETSCRUNCH [x y ] SETSCR določi razmerje enot na oseh * SETX n premik želve do koordinate x=n + SETY n premik želve do koordinate y=n + F SHOWNP ali je želva vidna * SHOWTURTLE ST riši želvo (je vidna) + r TOWARDS [x y ] smer želve proti točki (x,y) + WINDOW želva lahko gre čez rob zaslona in se takrat ne vidi 164 I WRAP F XCOR F YCOR želva lahko gre čez rob zaslona in se prikaže na nasprotni strani - zaslon je "zvit" v svitek (torus) želvina x koordinata želvina y koordinata + + + + = lE / < > + + + + + + + + + + + + o lE lE + lE lE o o o lE + o lE lE arkus kosinus arkus kotangens arkus sinus arkus tangens kosinus kotangens kvocient celi del zmnožek alEb zmnožek allEa2lE ••• lEan naključno število ostanek najbližje celo število sinus kvadratni koren . vsota a+b vsota al+a2+ •••+an tangens konjunkcija konjunkcija negacija disjunkcija disjunkcija seštevanje odštevanje množenje deljenje manjši večji enak ARCCOT ARCTAN COS COT SIN an 2. ~eracije in funkcije ARCCOS n ARCCOTANGENT n ARCSIN n ARCTANGENT n COSINE n COTANGENT n DIV a b INT n PRODUCT a b (PRODUCT al a2 ••• an ) RANro-1 n REMAINDER a b ROUND n SINE n ~RT n SUM a b (SUM al a2 ••• an ) TANGENT n TAN AND a b (AND al a2 NOT a OR a b (OR al a2 ••• an ) BF BL 3. Seznamski ukazi. ob je beseda ali seznam F ASCII z F BUTFIRST ob F BUTLAST ob F OlAR n F COUNT ob F EMPTYP ob F E:l UALP ob1 ob2 F FIRST ob F FPUT ob seznam F ITEM n ob F LAST ob kOQd ASCII znaka z objekt brez prvega elementa objekt brez zadnjega elementa znak s kodo ASCII n število elementov v objektu ali je objekt prazen (enakovredno OR ob=[] ob=" ali sta objekta enaka prvi element objekta dodaj objekt na začetek seznama n-ti element objekta zadnji element objekta + + + + +.. lE + + + + 165 F LIST obl ob2 F (LIST obl ob2 obn ) F LISTP ob F LPUT ob seznam F' MEMBERP x ob F NUMBERP ob F SENTENCE obl ob2 SE F (SE obl ob2 obn ) F WORD wl w2 F (WORD wl w2 ••• wn ) F WORDP ob 4. Definicije ukazov COPYDEF "imel "ime2 DEFINE "ime Hpar-I [v1J [v2] F DEFINEDP w F PRIMITIVEP w F TEXT "ime 5. Prireditveni stavek MAKE "ime ob F NAMEP ob F 1HING "ime 6. Krmilni stavki BYE IF pog [ukazil] [ukazi2] OUTPOUT ob OP REPEAT n [ukazi] RUN [ukazi] STOP TOPLEVEL F TRUE F FALSE ustvari seznam z objektoma kot + elementoma ustvari seznam objektov + ali je objekt seznam ~ dodaj objekt na konec seznama + ali je x element objekta :lE ali je objekt število ~ ustvari seznam iz elementov obeh + objektov ustvari seznam iz elementov posameznih + objektov ustvari stik dveh besed + ustvari stik danih besed + ali je objekt beseda ~ prepiši telo ukaza ime2 v imel o ••• lvn l l + sestavi ukaz z imenom ime, s parametri par in vrsticami vl vn ali je beseda w ime ukaza ali je beseda w praukaz loga seznam s seznamom parametrov in seznami + vrstic ukaza ime (obratno od DEFINE) priredi spremenljivki ime vrednost + objekta oziroma izraza ali ima objekt vrednost ~ vrednost imena + (običajno enakovredno :ime) zapusti LOGO (vanj se vrnemo z RUN) ~ če je pogoj izpolnjen, izvedi seznam ~ ukazi1, sicer izvedi seznam ukazi2 vrni objekt ob v kličoči ukaz + ponovi n-krat ukaze v seznamu + izvedi ukaze v seznamu + (enakovredno REPEAT 1 [ukazi]) vrni se v kličoči ukaz + vrni se v osnovni nivo (sprotni način) + logični da o logični ne o -- (PRINT obl ob2 ••• obn 7. Branje in izpis F KEYP PRINT ob PR F READCI:lAR 166 RC ali je pritisnjena kakšna tipka ~ izpiši vred ost objekta in se postavi + na začetek nove vrstice izpiši vrednost objektov; med + objekti po en presledek počaka na pritisk na tipko in ~ vrne ustrezni znak F READLIST RL SHOW ob SOUND [t r a j anj e vi šina] STARTROBOT STOPROBOT TYPE ob (TYPE obl ob2 • •• obn ) WAIT n 8. Zaslonski ukazi BRIGHT n CLEARTEXT CT COPYSCREEN F CURSOR FLASH INVERSE NORMAL OVER n SETCURSOR [a b] SETCUR SETTC [a b] TEXTSCREEN TS F TEXTCOLOUR TC 9. Delovni prostor preberi cel o vrstico kot seznam i zpiši objekt zapiskaj žel vi ne ukaze pošiljaj robot u ustavi pošiljanje ukazov robotu i zpiši objekt izpiši objekte brez presledkov počakaj n /50 sekunde svetlost 011 počisti prost or za besedilo prenesi zaslon na tiskalnik mesto (koor di nat i) tečke vključi utri panje zamenja vlogo papirja in črnila prekliče FLASH in INVERSE zamenja črnilo , čez katerega gre postavi tečko na koor dinat o (a , b) določi barvo papirja i n črnila zaslon nameni za izpisovan j e seznam z barvo papirj a in črnila lE lE lE lE o o o lE lE lE lE POPS POTS EDNS ERPS POALL PO "ime PONS namesto i mena lahko v ukaz ih navedemo t udi seznam imen ERALL zbriši vse ERASE "ime ER zbriši ukaz ime ERN "i me zbriši spr-emenl jivko ime ERNS zbriši vsa imena spremenljivk njihove vrednosti zbriši vse definicije ukazov izpiši vse izpiši definicijo ukaza ime izpiši imena in vrednosti vseh spremenljivk izpiši vse ukaze izpiši imena vseh ukazov Vključi urejanje imen lE + lE in lE lE lE lE lE lE lE lE 10. Datotečni ukazi in tiskanje Imamo š t iri tipe datotek s podaljški : LOG - ukazi in spremenljivke BIN - posnetek dela pomnilnika (s t r oj na koda , ••• ) SCR - slika - vsebina zaslonskega pomnilnika TXT - vsebina urejevalnika SAVE "ime [ime l ime2 • • • ] shrani ukaze iz se znama na datoteko ime.LOG SAVEALL "ime shrani vsebino delovnega prostora na lE ime. LOG SAVED "ime shrani urejevalnikov prostor lE SAVESCR "ime shrani sliko na zaslonu na ime. SCR lE SETDRIVE n izberi rnikrotračnik ( 1-8) , O-trak lE 1t37 CATALOG ERASEFILE "ime tip LOAD "ime tip LOADD "ime LOADSCR "ime PRINTCJN PRINTOFF COPYSCREEN seznam datotek na mikrotračniku zbriši datoteko vnesi datoteko vnesi urejevalnikovo datoteko vnesi zaslonsko sliko Vključi izpis na tiskalnik izključi izpis na tiskalnik prenesi zaslon na tiskalnik lE + + lE lE lE lE 11. Sistemski ukazi F NODES RECYCLE •CONTENTS .PRIMITIVES .RESERVE n .RESERVED .BLOAD "ime naslov .BSAVE "ime [naslov dolžina] .SETSERIAL n F .SERIALIN .SERIALOUT n .DEPOSIT naslov n F .EXAMINE naslov .CALL naslov 12. ~ročila o napakah Not enough inputs to 1 don't know how to ••• You don't say what to do with does not output to is used by LOGO is already defined is not true or false is not a word ••• defined To many inside parentheses open file problem 168 število prostih členov + sprosti proste (odr abI j ene ) člene lE (garbage collection) izpiši vse, kar poznaš + izpiši praukaze zasedi prostor za strojno kodo izpiše podatke o zasedenem prostoru vnese strojno kodo z ime.BIN na naslov lE shrani strojno kodo na ime.BIN lE postavi hitrost prenosa prebere RS232 pošlje n na vrata RS232 postavi v zlog naslov vrednost n + (POKE) vrednost zloga naslov (PEEK) + poženi strojno kodo na danem naslovu + ni dovolj vhodov (podatkov) za ukaz ne vem, kaj naj naredim z ..• (Logo ne pozna ukaza) nisi povedal, kaj naj naredim z ... ••• ne vrača vrednosti v .•. ••• uporablja LOGO (hoteli smo definirati praukaz) ••• je že definiran (že definirane ukaze lahko urejamo samo z EDIT, mi pa smo hoteli s TO) ••• vrednost ni TRUE ali FALSE (na primer izraz za geslom IF) ••• ni beseda (določeni ukazi delujejo samo na besedah kot vhodih) ••• definiran preveč notranjih okroglih oklepajev (verjetno manjka kakšen zaklepaj) problem z odprtjem datoteke