Go to the first, previous, next, last section, table of contents.


Rukovanje radnim prostorom

Definiranje procedura

to

TO procname :input1 :input2 ...			(specijalna forma)

komanda. Pripremi Logo za prihvat definicije procedure. Procedura ce se zvati procname i nesmije vec postojati procedura sa istim imenom. Inputi ce se zvati input1 .... Bilo koji broj inputa je dozvoljen, ukljucujuci i nista. Imena procedura i inputa su case-insensitive (neosjetljiva na velika/mala slova).

Za razliku od svih ostalih Logo procedura, TO uzima svoje inpute, rijeci upisane na instrukcijskoj liniji, kao da su qvotirane ("), a ne kao rezultat evaluiranja izraza da se dobiju inputi. (To je ono sto znaci specijalna forma.)

Ova verzija Loga dozvoljava promijenjivi broj inputa proceduri. Svaka procedura ima MINIMUM, DEFAULT, i MAXIMUM broj inputa. (Ovaj zadnji moze biti beskonacan.)

MINIMUM broj inputa je broj obaveznih inputa, koji mora doci prvi. Obavezni input se oznacava sa

:inputname

notacijom.

Nakon obaveznih inputa moze biti nula ili vise neobaveznih inputa, koji se oznacavaju sa ovakovom notacijom:

[:inputname default.value.expression]

Kada se procedura pozove, ako stvarni inputi nisu dati za ove neobavezne inpute, default.value.expression-i se evaluiraju da se postave vrijednosti za odgovarajuce :inputname. Inputi se obradjuju s lijeva na desno, tako da default.value.expression moze biti izracunata uz pomoc ranijih inputa. Primjer:

to proc :inlist [:startvalue first :inlist]

Ako je procedura pozvana sa

proc [a b c]

tada ce varijabla inlist imati vrijednost [A B C], a varijabla startvalue ce imati vrijednost A. Ako se procedura pozove sa

(proc [a b c] "x)

tada ce varijabla inlist imati vrijednost [A B C], a varijabla startvalue ce imati vrijednost X.

Nakon svih obaveznih i neobaveznih inputa moze doci jedan rest (ostatak) input, pretstavljen slijedecom notacijom:

[:inputname]

To je ostatak input, a ne neobavezni input, jer nema default.value.expression. Moze postojati najvise jedan rest input. Kada se procedura pozove, vrijednost ovoga inputa ce biti lista koja sadrzi sve aktualne inpute date pri pozivu koji nisu upotrijebljeni za obavezne i neobavezne inpute. Primjer:

to proc :in1 [:in2 "foo] [:in3]

Ako ovu proceduru pozovemo sa

proc "x

onda in1 ima vrijednost X, in2 ima vrijednost FOO, a in3 ima vrijednost [] (praznu listu). Ako je pozovemo sa

(proc "a "b "c "d)

onda in1 ima vrijednost X, in2 ima vrijednost B, a in3 ima vrijednost [C D].

MAXIMUM broj inputa za proceduru je neogranicen, ako je dan rest input; inace, to je broj obaveznih inputa plus broj neobaveznih inputa.

DEFAULT broj inputa, je broj koji ce biti prihvacen ako procedura i inputi pri pozivu nisu obuhvaceni zagradama -- obicno je jednak minimalnom broju inputa. Ako zelite drugi DEFAULT broj, mozete ga indicirati stavljanjem broja na zadnje mjesto u TO liniji. Primjer:

to proc :in1 [:in2 "foo] [:in3] 3

Ova procedura ima minimum od jednog inputa, DEFAULT (standardno) tri inputa i neograniceni maksimum.

Logo odgovara na TO komandu sa ulaskom u mod za definiciju procedura. Prompt znak se mijenja od "?" na ">" i sve instrukcije koje upisete postaju dio definicije, dotle -- dok na praznoj liniji ne upisete END.

define

DEFINE procname text

komanda. Definira proceduru sa imenom procname i tekstom text. Ako vec postoji procedura sa istim imenom, nova definicija zamjenjuje staru. Tekst input mora biti lista ciji su clanovi liste. Prvi clan je lista inputa; izgleda kao TO linija, ali bez rijeci TO, bez imena procedure i bez dvotocki (dots) ispred imena inputa. Drugim rijecima, clanovi ove prve podliste su imena nuznih inputa i liste za imena opcijskih inputa. Preostale podliste od tekst inputa cine tijelo procedure, sa jednom podlistom za svaku instrukcijsku liniju. (Nema END linije u tekst inputu.) Greska je redefinirati primitivnu proceduru, osim ako varijabla REDEFP nema vrijednost TRUE.

See section redefp

text

TEXT procname

outputira tekst procedure procname u obliku koji ocekuje DEFINE: lista od lista, prva od kojih opisuje inpute proceduri, a ostale su linije iz tijela procedure. TEXT ne pamti formatirajuce informacije upotrijebljene kada je procedura pisana, kao kontinuacijske linije i ekstra razmake.

fulltext

FULLTEXT procname

outputira reprezentaciju procedure procname u kojoj je formatiranje sacuvano. Ako je procedura definirana sa TO, EDIT ili LOAD, tada je output lista rijeci. Svaka rijec pretstavlja jednu cijelu liniju definicije u obliku kakav outputira READWORD, ukljucujuci ekstra razmake i kontinuacijske linije. Zadnji clan outputa pretstavlja END liniju. Ako je procedura bila definirana sa DEFINE, tada je output lista od lista. Ako se te liste ispisu, jedna po liniji, rezultat ce nalikovati definiciji pomocu TO. Opaska: output od FULLTEXT nije pogodan kao input za DEFINE!

See section to ; section edit ; section load ; section define

copydef

COPYDEF newname oldname

komanda. Napravi newname procedurom identicnom sa oldname. Oldname moze biti i primitive. Ako je newname bio prije definiran, prijasnja definicija se gubi. Ako je newname vec bio primitive, redefinicija nije dopustena, osim ukoliko varijabla REDEFP ima vrijednost TRUE. Definicije kreirane sa COPYDEF se ne spremaju sa SAVE; primitivi se nikako ne spremaju, a user definirane procedure stvorene sa COPYDEF se zakopavaju. (Moze vas zbuniti ako pozovete PO ili POT na proceduri definiranoj sa COPYDEF, jer ce izlistana procedura imati staro ime. To je razlog za zakopavanja.)

Opaska: dijalekti Loga se razlikuju u redosljedu inputa COPYDEFu. Ovaj dijalekt upotrebljava "MAKE redosljed", a ne "NAME redosljed".

See section redefp ; section save ; section po ; section pot

Definiranje varijabli

make

MAKE varname value

komanda. Dodijeli vrijednost value varijabli sa imenom varname; varname mora biti rijec. Imena varijabli su case-insensitive (neosjetljiva na velika-mala slova). Ako varijabla sa istim imenom vec postoji, vrijednost te varijable se mijenja. Ako ne postoji, stvori se globalna varijabla.

name

NAME value varname				(library procedura)

komanda. Isto kao MAKE, ali sa inputima u obrnutom redosljedu.

local

LOCAL varname
LOCAL varnamelist
(LOCAL varname1 varname2 ...)

komanda. Prihvaca kao inpute jednu ili vise rijeci, ili listu rijeci. Stvori varijablu za svaku od tih rijeci, sa tom rijeci kao imenom varijable. Stvorene varijable su lokalne za proceduru unutar koje su definirane. Logo varijable slijede "dynamic scope rules" (ponasaju se po dinamickim pravilima vidljivosti); varijabla koja je lokalna u nekoj proceduri je dostupna (vidljiva) u svakoj podproceduri koju je ta procedura pozvala. Varijable kreirane sa LOCAL nemaju nikakovu pocetnu vrijednost; vrijednost im mora biti dodijeljena (na primjer sa MAKE) prije nego sto procedura pokusa procitati (upotrijebiti) njihovu vrijednost.

See section make

thing

THING varname
:quoted.varname

outputira vrijednost varijable cije ime je input. Ako ima vise takovih varijabli, unutrasnja lokalna varijabla toga imena se izabere. Notacija sa ":" je skracenica ne za THING, nego za kombinaciju

thing "

tako da :FOO znaci THING "FOO.

Property liste

Primjedba: Imena property lista su uvijek case-insensitive (neosjetljiva na velika-mala slova). Imena individualnih property-a su case-sensitive (osjetljiva) ili case-insensitive (neosjetljiva) sto ovisi o vrijednosti CASEIGNOREDP, koji je standardno TRUE.

See section caseignoredp

pprop

PPROP plistname propname value

komanda. Doda property u plistname property listu sa imenom propname i vrijednoscu value.

gprop

GPROP plistname propname

outputira vrijednost propname property-a (osobitosti) u plistname property listi, ili praznu listu ako nema takove property.

remprop

REMPROP plistname propname

komanda. Izvadi property nazvan propname iz property liste zvane plistname.

plist

PLIST plistname

outputira listu ciji su neparni elementi imena, a parni elementi vrijednosti, od properties (osobina) u property listi plistname. Output je kopija od prave property liste; mijenjanjem properties, kasnije, nece se magicno promijeniti lista outputirana ranije sa PLIST.

Workspace predikati

procedurep

PROCEDUREP name
PROCEDURE? name

outputira TRUE ako je input ime procedure.

primitivep

PRIMITIVEP name
PRIMITIVE? name

outputira TRUE ako je input ime primitivne procedure (ugradjene u Logo). Pazite, neke od procedura opisanih u ovom help sistemu su library procedure, a ne primitivi.

definedp

DEFINEDP name
DEFINED? name

outputira TRUE ako je input ime user-definirane (definirane od korisnika/programera) procedure, ukljucujuci i library procedure. (Zapravo Logo ne zna za library procedure dok svaka od njih nije pozvana.)

namep

NAMEP name
NAME? name

outputira TRUE ako je input ime varijable.

Workspace upiti

contents

CONTENTS

outputira "contents listu", tj., listu od tri liste koje sadrze imena definiranih procedura, varijabli i property lista, tim redosljedom. Ta lista ukljucuje sve imenovane, a nezakopane objekte u workspace-u (radnom prostoru).

buried

BURIED

outputira contents listu koja sadrzi sve zakopane (sa BURY) objekte u workspaceu.

procedures

PROCEDURES

outputira listu imena svih nezakopanih user-definiranih procedura u workspace-u. Pazite, to je lista imena, a ne contents lista. (Ipak, procedure koje zahtijevaju contents listu kao input, prihvatiti ce i ovu listu.)

names

NAMES

outputira contents listu koja se sastoji od jedne prazne liste (oznacava nula imena procedura) koju slijedi lista svih nezakopanih imena varijabli u workspace-u.

plists

PLISTS

outputira contents listu koja se sastoji od dvije prazne liste (sto znaci nista procedura i nista varijabli) iza kojih slijedi lista imena svih nezakopanih property lista u workspace-u.

namelist

NAMELIST varname				(library procedura)
NAMELIST varnamelist

outputira contents listu (listu sadrzaja Loga - procedure, varijable itd.) koja se sastoji od prazne liste koju slijedi lista od imena varname ili imena varnamelist danih kao input. Ovo je korisno u sklopu sa workspace control procedurama, koje traze contents listu kao input.

pllist

PLLIST plname					(library procedura)
PLLIST plnamelist

outputira contents listu (listu sadrzaja) koja se sastoji od dvije prazne liste iza kojih je lista imena danih kao input. Ovo je korisno u sprezi sa workspace kontrolnim procedurama koje zahtijevaju contents list kao input.

Primjedba: Sve procedure ciji je input naveden kao contentslist (lista sadrzaja) ce prihvatiti jednu rijec (uzevsi je kao ime procedure), listu rijeci (uzevsi ih kao imena procedura), ili listu od tri liste, kao sto je opisano pod CONTENTS komandom.

See section contents

nodes

NODES

outputira listu od dva broja. Prvi stoji za broj nodova memorije koji je trenutacno u upotrebi. Drugi oznacava maksimalni broj nodova koji su bili u upotrebi od zadnjeg poziva NODES. (Node je mali blok kompjutorske memorije koji Logo upotrebljava. Svaki broj zauzima jedan node. Svaka ne-numericka rijec zauzima jedan node, uz jos nesto ne-node memorije za znakove u rijeci. Svaki niz zauzima jedan node, sa jos nesto ne-node memorije, i sa memorijom koju zauzima svaki element niza. Svaka lista zauzima jedan node po elementu, uz memoriju za svaki element.) Ako zelite pratiti potrosnju memorije za neki algoritam, najbolje je pozvati GC na pocetku svake iteracije, jer ce inace maksimum ukljuciti i memoriju koja je upotrijebljena, a jos nije oslobodjena.

gc

GC
(GC anything)

komanda. Pokrene Garbage Collector (kolektor smeca), koji povrati (oslobodi) neiskoristene nodove (memorijske jedinice). Logo to sam cini kada je potrebno, ali mozete ovo upotrijebiti da kontrolirate tocno kada to zelite. Na primjer, brojevi koje outputira NODES operacija, nece biti narocito korisni -- ukoliko prije poziva nije izvrsen GC. Drugi razlog za upotrebu je sto GC uzme primjetni dio sekunde, te ne zelite da vam se dogodi usred neke vremenski kriticne animacije. Ako je pozvan sa argumentom (bilo koje vrijednosti), GC izvrsi potpuno sakupljanje smeca, ukljucujuci GCTWA (GC zaista beskorisnih atoma, sto znaci da izbrise iz Logo memorije rijeci koje su nekada bile procedure ili varijable, ali to vise nisu); bez argumenta, GC izvrsi Generational GC, sto znaci da se samo nedavno stvoreni nodovi pregledaju. (Ovo drugo je obicno dovoljno.)

Workspace inspekcija

po

PO contentslist

komanda. Ispise na write stream (normalno terminal) definicije svih procedura, varijabli i property lista imenovanih u inputiranoj contentslist.

poall

POALL						(library procedura)

komanda. Ispise sve nezakopane definicije u workspace-u. Stoji za PO CONTENTS.

See section contents

pops

POPS						(library procedura)

komanda. Ispise definicije svih nezakopanih procedura u workspace-u.
Stoji za PO PROCEDURES.

See section po ; section procedures

pons

PONS						(library procedura)

komanda. Ispise definicije svih nezakopanih varijabli u workspace-u. Stoji za PO NAMES.

See section po ; section names

popls

POPLS						(library procedura)

komanda. Ispise sadrzaj svih nezakopanih property lista u workspace-u. Stoji za PO PLISTS.

See section po ; section plists

pon

PON varname					(library procedura)
PON varnamelist

komanda. Ispise definicije svih imenovanih varijabli.
Stoji za PO NAMELIST varname(list).

See section po ; section namelist

popl

POPL plname					(library procedura)
POPL plnamelist

komanda. Ispise definicije imenovanih property lista. Stoji za PO PLLIST plname(list).

See section po ; section pllist

pot

POT contentslist

komanda. Ispise naslovne linije svih imenovanih procedura te definicije imenovanih varijabli i property lista. Za property liste, cijela lista je pokazana na jednoj liniji, a ne kao serija PPROP instrukcija kao u PO.

See section pprop ; section po

pots

POTS						(library procedura)

komanda. Ispise naslovne linije svih nezakopanih procedura u workspace-u. Stoji za POT PROCEDURES.

See section procedures

Workspace kontrola

erase

ERASE contentslist
ER contentslist

komanda. Ukloni iz workspace-a procedure, varijable i property liste imenovane u inputu. Primitivne procedure ne mogu biti uklonjene, osim ako je vrijednost varijable REDEFP -- TRUE. (Standardno je FALSE.)

See section redefp

erall

ERALL

komanda. Obrise (ukloni) iz workspace-a sve nezakopane procedure, varijable i property liste. Skracuje ERASE CONTENTS.

See section contents

erps

ERPS

komanda. Obrise sve nezakopane procedure iz workspace-a. Skracuje ERASE PROCEDURES.

See section erase ; section procedures

erns

ERNS

komanda. Obrise sve nezakopane varijable iz workspacea. Skracuje ERASE NAMES.

See section erase ; section names

erpls

ERPLS

komanda. Obrise sve nezakopane property liste iz workspace-a. Skracuje ERASE PLISTS.

See section erase ; section plists

ern

ERN varname					(library procedura)
ERN varnamelist

komanda. Obrise iz workspace-a varijable imenovane u inputu.
Skracuje ERASE NAMELIST varname(list).

section erase ; section namelist

erpl

ERPL plname					(library procedura)
ERPL plnamelist

komanda. Obrise iz workspace-a property liste imenovane u inputu.
Skracuje ERASE PLLIST plname(list).

See section erase ; section pllist

bury

BURY contentslist

komanda. Zakopa sve procedure, varijable i property liste u inputu contentslist. Zakopani objekt nece biti ukljucen u liste koje outputiraju CONTENTS, PROCEDURES, VARIABLES i PLISTS, ali ce biti ukljucen u listu koju outputira BURIED. Podrazumijeva se da se zakopani objekti ne ispisuju sa POALL ili spremaju na disk sa SAVE.

See section contents ; section procedures ; section pons ; section plists ; section poall ; section save

buryall

BURYALL						(library procedura)

komanda. Skracuje BURY CONTENTS.

See section contents

buryname

BURYNAME varname				(library procedura)
BURYNAME varnamelist

komanda. Skracuje BURY NAMELIST varname(list).

See section bury ; section namelist

unbury

UNBURY contentslist

komanda. Iskopa sve zakopane procedure, varijable i property liste imenovane u inputu. To jest, imenovani objekti ce se ponovo moci vidjeti sa CONTENTS, itd.

See section contents

unburyall

UNBURYALL					(library procedura)

komanda. Stoji za UNBURY BURIED.

See section buried

unburyname

UNBURYNAME varname				(library procedura)
UNBURYNAME varnamelist

komanda. Stoji za UNBURY NAMELIST varname(list).

See section unbury ; section namelist

trace

TRACE contentslist

komanda. Oznaci inputirane objekte za tracing. Poruka se ispise, svaki put kada se trace-irana procedura pozove, dajuci stvarne vrijednosti inputa, i uvijek kada trace-irana procedura stane (STOP) ili outputira (OP). Poruka se ispise uvijek kada se nova vrijednost dodijeli trace-iranoj varijabli sa MAKE. Poruka se ispise uvijek kada se nova property stavi u trace-iranu property listu sa PPROP.

See section stop ; section output ; section make ; section pprop

untrace

UNTRACE contentslist

komanda. Iskljuci tracing za imenovane objekte.

step

STEP contentslist

komanda. Oznaci navedene objekte za step-iranje. Kada se step-irana procedura pozove, svaka instrukcijska linija u tijelu procedure se ispise prije nego se izvrsi, i Logo ceka na usera da pritisne ENTER na terminalu. Poruka se ispise svaki puta kada se pozove "sjena" step-irane varijable -- lokalna varijabla istog imena se stvori (sjena) ili kao input proceduri (rekurzija) ili sa LOCAL komandom.

See section local

unstep

UNSTEP contentslist

komanda. Iskljuci stepiranje za imenovane objekte.

edit

EDIT contentslist
ED contentslist
(EDIT)
(ED)

komanda. Editira definicije navedenih objekata, upotrebljavajuci vas omiljeni editor, sto odredjuje EDITOR sistemska varijabla. Ako sistemska varijabla EDITOR nije postavljena, Logo poziva `jove' (mali editor slican Emacs-u, ali bez mogucnosti rada sa misem). Ako je pozvan bez argumenta, EDIT editira isti privremeni file koji je ostao od prijasnjeg poziva EDIT-u. Kada izadjete iz editora, Logo ucita promijenjene definicije i modificira workspace (radni prostor) prema tome.

Ako postoji sistemska varijabla TEMP, tada Logo upotrijebi njezinu vrijednost kao direktorij u koji ce pisati privremeni file za editiranje.

EDIT moze biti upotrijebljen bez obaveznog inputa i bez zagrada, ako nema nista na liniji iza njega.

edall

EDALL						(library procedura)

komanda. Skracuje EDIT CONTENTS.

See section contents

edps

EDPS						(library procedura)

komanda. Skracuje EDIT PROCEDURES.

See section edit ; section procedures

edns

EDNS						(library procedura)

komanda. Skracuje EDIT NAMES.

See section edit ; section names

edpls

EDPLS						(library procedura)

komanda. Skracuje EDIT PLISTS.

See section edit ; section plists

edn

EDN varname					(library procedura)
EDN varnamelist

komanda. Skracuje EDIT NAMELIST varname(list).

See section edit ; section namelist

edpl

EDPL plname					(library procedura)
EDPL plnamelist

komanda. Skracuje EDIT PLLIST plname(list).

See section edit ; section pllist

save

SAVE filename

komanda. Spremi u file filename sve nezakopane procedure, varijable i property liste. Stoji za:

to save :filename
local "oldwriter
make "oldwriter writer
openwrite :filename
setwrite :filename
poall
setwrite :oldwriter
close :filename
end

savel

SAVEL contentslist filename			(library procedura)

komanda. Spremi u file filename definicije procedura, varijabli i property lista specifiziranih u contentslist.

load

LOAD filename

komanda. Procita instrukcije iz imanovanog file-a i izvrsi ih. File moze sadrzati definicije procedura sa TO i one ce biti prihvacene, cak i ako procedura sa istim imenom vec postoji. Ako file dodijeli (postavi) listu kao vrijednost varijable STARTUP, tada ce ta lista biti izvrsena, kao lista instrukcija, nakon sto je file ukrcan.

help

HELP name
(HELP)

komanda. Ispise informaciju iz "reference manuala" (opisa jezika) o primitivnoj proceduri koja je navedena kao input. Bez inputa, izlista sve primitivne procedure za koje "help" (pomoc) postoji. Ako postoji "environment" (sistemska) varijabla LOGOHELP, tada se njezina vrijednost uzima kao direktorij u kojem treba potraziti help filove, umjesto "default" (standardnog) help direktorija. (Standardni help direktorij za DOS/Win je c:\ucblogo\helpfile , a za UNIX /usr/local/lib/logo/helpfiles .)

HELP komanda se moze upotrijebiti i bez inputa i bez zagrada, uz uvijet da je nista ne slijedi na instrukcijskoj liniji.


Go to the first, previous, next, last section, table of contents.