LOGO — Słownik minimum cz. II

Drugi odcinek wykazu procedur LOGO obejmuje definiowanie procedur oraz ich modyfikację, instrukcje wejścia/wyjścia oraz instrukcje warunkowe, iteracyjne i sterujące.

 

COPYDEF s s

Utworzenie nowej procedury o treści identycznej do treści jednej z uprzednio zdefiniowanych procedur LOGO. Pierwszy parametr jest nazwą tworzonej procedury, drugi — nazwą procedury kopiowanej.

TO ZMIEŃ.NAZWĘ :stara  :nowa COPYDEF  :nowa :stara ERASE   :stara END

ZMIEN.NAZWE "left "lewo

LEFT is a primitive in ZMIEN.NAZWE

 

DEFINE s I

Utworzenie nowej procedury o nazwie podanej jako pierwszy parametr i treści określonej przez pa rametr drugi — listę list, stanowiących kolejne wiersze definiowanej procedury. Jako pierwszy wiersz zawsze podaje się listę parametrów (w szczególności może ona być pusta).

DEFINE "czesc!   [[]PRINT [Dzien dobry, klaniam sie.]]] PO "czesc!

TO CZESC!

PRINT [Dzień dobry, kłaniam sie.]

END

 

DEFINEDP s ->p

cunkcja określająca, czy dane słowo jest nazwą istniejącej procedury LOGO.

PR DEFINEDP "logo

FALSE

PR DEFINEDP "definedp FALSE

 

EDIT sl ED sl

Przejście do trybu redagowania procedur. Parametrem EDIT jest nazwa procedury, którą chcemy redagować, lub lista takich nazw.

edit KWADRAT

ED  [KWADRAT WIELOKAT OKRAG]

W wyniku wywołania ED ekran zmienia postać: jego dotychczasowa zawartość zostaje usunięta, na jej miejscu natomiast pojawia się tekst redagowanej procedury (procedur). Ostatni wiersz ekranu ma postać

LOGO EDITOR © SOLI  / LCSI

W przypadku wywołania ED bez parametru na ekranie ukazuje się ostatnio redagowana procedura (lub „pusta strona", zależnie od implementacji LOGO na danym komputerze). Pusty ekran można również uzyskać przez wywołanie

ed []

W trybie redagowania tekst może być modyfikowany w dowolnym miejscu ekranu przy pomocy następujących klawiszy i ich kombinacji:

 

↑ ↓  ← →

Przesunięcie kursora o jedno miejsce we wskazanym kierunku:

DELETE (CAPS SHIFT — 0)

Usunięcie znaku na lewo od kursora lub pod kursorem:

EXTEND MODE ← EXTEND MODE →

Przesunięcie kursora na początek lub koniec wiersza;

EXTEND MODE ↑ EXTEND MODE ↓

Przesunięcie kursora na początek lub koniec strony (fragmentu tekstu o objętości jednego ekranu);

EXTEND MODE B EXTEND MODE E

Przesunięcie kursora na początek (B) lub koniec (E) redagowanego tekstu;

EXTEND MODE Y

Usunięcie części wiersza na prawo od kursora

EXTEND MODE R

Wstawienie usuniętego przez ostatnio użyte EXTEND MODE Y tekstu w miejscu kursora; EXTEND MODE P EXTEND MODE N

Wyświetlenie na ekranie poprzedniej (P) lub następnej (N) strony tekstu;

CTRL — L

Przesunięcie tekstu na ekranie tak, by kursor znajdował się w środkowej linii ekranu;

EXTEND MODE C CTRL — C

Wyjście z trybu redagowania. Tekst wraz z dokonanymi poprawkami jest zapamiętywany jako treść procedur LOGO;

 

BREAK (CAPS SHIFT — BREAK)CTRL — G

Przerwanie pracy w trybie redagowania. Wszystkie ostatnio wprowadzone zmiany są ignorowane. W zwykłym trybie Logo klawisz ten przerywa wykonanie jakiegokolwiek programu.

 

EDNS sl

Przejście do trybu redagowania nazw zmiennych oraz ich aktualnych wartości. W przypadku wywołania EDNS bez parametru redagowane są wartości nazwy wszystkich aktualnie zawartych w pamięci zmiennych. Zob. EDIT.

MAKE "alfa  [Snieg Deszcz Upal]

MAKE "beta  1.255

EDNS [alfa beta]

 

END

Znacznik końca definicji procedury. Zob. TO.

 

PRIMITIVEP s → p

Funkcja określająca, czy dane słowo jest nazwą procedury pierwotnej (primitive), czy nie.

PRINT PRIMITIVEP  "primitivep TRUE

PRINT PRIMITIVEP  "logo FALSE

 

TEXT s → |

Operacja, której argumentem jest nazwa istniejącej procedury LOGO, zaś wynikiem — jej treść w formie listy list, stanowiących kolejne wiersze procedury. Jako pierwszy wiersz zawsze występuje lista parametrów (w szczególności może ona być pusta).

TO HEJ

PRINT "Hej!!! END

PRINT TEXT "hej [][PRINT "Hej!!!]

 

TO s par1 par2...TO s par1 par2...

Początek definicji nowej procedury. Po słowie TO następuje nazwa tworzonej procedury oraz ewentualnie nazwy jej parametrów (każda poprzedzona dwukropkiem).

TO WIELOKĄT :iloscbokow

:dlugoscboku

Po wprowadzeniu tak konstruowanego nagłówka procedury znak zaproszenia z lewej strony nowego wiersza zmienia się z ? na >. Wpisywano teraz wiersze nie są wykonywane, lecz zapamiętywane jako tekst nowo tworzone] procedury. Treść definicji należy zakończyć wierszem, zawierającym wyłącznie słowo END.

TO WIELOKĄT  :iloscbokow  :dlugoscboku REPEAT  :iloscbokow  [FD  :dlugoscboku LT 360 / :iloscbokow]

END

WIELOKAT defined

 

Użycie klawisza BREAK w trybie definiowania procedury powoduje natychmiastowe wyjście z tego trybu i zignorowanie dotychczas wprowadzonych wierszy definicji.

 

2.2. Budowa algorytmu

IF p l IF pl I

IF pl l → nsl

Instrukcja warunkowa. Pierwszym parametrem IF jest wyrażenie logiczne stanowiące warunek, drugim — lista instrukcji do wykonania w przypadku spełnienia warunku, ew. trzecim — lista instrukcji do wykonania w przypadku, gdy warunek nie jest spełniony.

IF MEMBERP "a [a b c][PR "Tak][PR "Nie] Tak

Procedura IF może także pełnić role operacji.

PRINT IF MEMBERP "d [a b c] ["Tak] ["Nie] Nie

W takim wypadku należy jednak użyć IF z trzema parametrami.

TO MAX  :zbiór

IF COUNT  :zbior=1 [OP FIRST : zbior] OUTPUT IF  (MAX BF  :zbior)>(FIRST:zbior) [MAX BF :zbior] [FIRST :zbior]

END

PRINT MAX  [10 0 4 25 1 -7] 25

 

IF p THEN IIF p THEN I ELSE I

IF p THEN I ELSE I → nsl

IF w Terrapin Logo ma znaczenie analogiczne do IF z tym, że listy instrukcji są dodatkowo poprzedzone słowami THEN i (ew.) ELSE.

 

IF FALSE IIFF I

Wykonanie podanej jako parametr listy instrukcji w przypadku, gdy warunek sprawdzony przez ostatnio użytą procedurę TEST przyjął wartość FALSE

 

TO CZY :teza TEST :teza

IFF [PR "Nie] IFT  [PR "Tak] END

CZY   (2 + 4  > 5) Tak

Wykonanie podanej jako parametr listy instrukcji w przypadku, gdy warunek sprawdzony przez ostatnio użytą procedurę TEST przyjął wartość TRUE.

TEST   ("234 = 234)   IF TRUE   [PR "OK] OK

 

OUTPUT nslOP nsl

Zakończenie wykonywania procedury i przekazanie jednostce nadrzędnej (innej procedurze) wartości, będącej parametrem OUTPUT. OUTPUT może występować wyłącznie w tekście procedury.

TO PI

OUTPUT 3.1415926 END

PRINT 2*PI

6.2831852

TO L.MNOGA  :slowo

OUTPUT WORD BUTLAST  :slowo  "i

END

PRINT L.MNOGA "noga

nogi

 

REPEAT n I

Powtórzenie listy instrukcji, stanowiącej drugi parametr ilość razy podaną jako parametr pierwszy.

TO GWIAZDA :ilosckatow :bok  :st REPEAT: ilosckatow    [FD :bok LT 360  *:st /  :ilosckatow]

END

GWIAZDA 5 60 2 GWIAZDA 9 80 4

RUN IRUN I → nsl

Wykonanie listy instrukcji podanej jako parametr. RUN może być również operacją.

TO LICZYMY

PR RUN READLIST

LICZYMY

END

LICZYMY 1 + SIN 90 2

 

STOP

Zakończenie wykonywania procedury. STOP może występować wyłącznie w tekście procedury.

TO ECHO :słowo

IF EMTYP  :słowo  [STOP]

PRINT  :slowo

ECHO BUTFIRST  :slowo

END

ECHO "Hej

Hej

ej

j

 

TEST p

Sprawdzenie wartości logicznej podanego jako parametr wyrażenia. Procedura używana w powiązaniu z IFTRUE lub IFFALSE.

TEST "słowo

SŁOWO is not TRUE or FALSE

 

TOPLEVEL

Przerwanie realizacji programu.

TO POLE  :a :b

IF OR (:a  <0)(:b < 0) [PR [Ujemny bok prostokąta?] TOPLEVEL] OUTPUT  :a * :b END

PRINT POLE 10 5

50

PRINT POLE -10  10

Ujemny bok prostokąta?

 

2.3. Wyjście

 

PRINT nsl(PR nsl...)

Wypisanie na ekranie monitora (lub, po uprzednim użyciu PRINTON, również na drukarce) podanego jako parametr obiektu. Przy wypisywaniu pomijany jest znak " poprzedzający słowo oraz zewnętrzne nawiasy list. Po zakończeniu wypisywania kursor jest przenoszony na początek nowej linii

PRINT 345.8 345.8

PRINT SE  "Numer  100 Numer 100

PRINT  [ALFA  [Beta Gamma]] ALFA [Beta Gamma]

 

PRINT1 ns!(PRINT1 nsl ...)

Patrz TYPE

 

SHOW nsl(SHOW nsl...)

Działa podobnie jak PRINT z tym, że listy drukowane są wraz z zewnętrznymi nawiasami, a słowa — poprzedzone znakiem ".

MAKE "alfa "beta SHOW  :alfa "beta

SHOW SE :alfa 100 [beta 100] PRINT SE   :alfa  100 beta 100

 

SOUND I

Instrukcja pozwalająca na uzyskanie dźwięku w Sinclair LOGO. Parametrem SOUND jest lista dwu-elementowa. Pierwszy element określa czas trwania dźwięku w sekundach, drugi — jego wysokość w półtonach (-62..75).

SOUND [10 24]

TO ZAGRAJ  :slowo

IF EMPTYP  :slowo  [STOP]

SOUND SE 0.2  (ASCII FIRST  :slowo)  - 65

ZAGRAJ BUTFIRST  :slowo

END

ZAGRAJ "Nabuchodonozor

 

TYPE nsl(TYPE nsl...)

Działa podobnie jak PRINT z tym, że po wypisaniu tekstu kursor nie jest przenoszony do nowej linii.

TYPE  "Depeche

PRINT "Mode

DepecheMode

 

2.4. Wejście

 

KEYP → p

Funkcja określająca, czy w danym momencie wciśnięty jest jeden z klawiszy.

TO JAZDA FD 2

IF NOT KEYP [JAZDA]

IF RC =  "p  [RT 22.5]

IF RC =  "q  [LT 22.5]

JAZDA

END

JAZDA

 

RC? → p

Patrz KEYP.

 

READCHAR → s RC → s

Operacja, wynikiem której jest słowo jednoelemen-towe, określające wciśnięty klawisz. READCHAR przerywa wykonanie programu do momentu, aż klawisz zostanie wciśnięty.

TO MASZYNA

TYPE READCHAR MASZYNA

END

MASZYNA

 

READCHARACTER → s RC → s

Patrz READCHAR.

 

READLIST  → IRL → I

Operacja, wynikiem której jest lista zawierająca tekst wprowadzony z klawiatury. Po wywołaniu READLIST na ekranie monitora pojawia się kursor, zaś wykonanie programu zostaje przerwane do momentu zakończenia wpisywania tekstu przez wciśnięcie ENTER (RETURN)

TO DIALOG

TYPE ": PR SE  [Ja tez] RL

DIALOG

END

DIALOG

:lubie cukierki.

Ja tez lubie cukierki..

 

REQUEST →  I RG →  I

Patrz READLIST

 

2.5. Ekran tekstowy

 

CLEARTEXT CT

Usunięcie wszystkich tekstów z ekranu. Fragment ekranu przeznaczony na grafikę pozostaje bez zmian.

TS REPEAT 10 [PR "Logo]

CLEARTEXT

CURSOR → I

Aktualne współrzędne kursora na ekranie w postaci listy dwuelementowej.

TS PR CURSOR 0 0

 

NODRAW

Patrz TEXTSCREEN

 

SETCURSOR ISETCUR I

Ustawienie kursora w żądanym miejscu ekranu. Parametrem jest dwuelementowa lista liczb, stanowiących numer kolumny (0..30) oraz wiersza (0..21).

TO PRZESUNKURSOR  :dx  :dy

SETCUR SE (:dx + FIRST CURSOR)

(:dy + LAST CURSOR) END

TS REPEAT 6 [TYPE "X

PRZESUNKURSOR 2  l]

 

TEXTSCREENTS

Przeznaczenie całej powierzchni ekranu na teksty; grafika zostaje z niego usunięta.

CS FD 40

TS PRINT "Halo

CS

TS

 

2.6. Atrybuty druku

 

BRIGHT n

Umożliwia wypisanie tekstu jaskrawym drukiem. Wywołanie BRIGHT 1 powoduje przejście do tego trybu; wyjście z niego następuje po wywołaniu BRIGHT 0, zakończeniu wykonywania programu lub pojawieniu się komunikatu o błędzie.

TO DOBITNIEJ  :tekst

BRIGHT 1 TYPE   (SE ": tekst")

BRIGHT 0

END

TYPE   [P.]  DOBITNIEJ  [mgr inz] PR [Z. Nowak]

P. mgr inz Z. Nowak

 

FLASH

Przejście do trybu pisania na migającym tle; wyjście z tego trybu następuje wskutek wywołania NORMAL, zakończenia wykonania programu lub pojawienia się komunikatu o błędzie.

FLASH PRINT "Karol

 

INVERSE

Przejście do trybu pisania przy zamienionych kolorach tła i druku; wyjście z tego trybu następuje wskutek wywołania NORMAL, zakończenia wykonania programu lub pojawienia się komunikatu o błędzie.

INVERSE PR "Karol

 

NORMAL

Przywrócenie standardowych atrybutów druku, tzn, usunięcie efektów wcześniejszych wywołań FLASH i INVERSE.

TO  W.KRATKĘ  :slowo

IF EMPTYP :slowo [STOP]

INVERSE TYPE FIRST :słowo

IF EMPTYP BF  :slowo  [STOP]

NORMAL TYPE FIRST BF  :slowo

W.KRATKE BF BF :slowo

END

W.KRATKĘ  "Karol

 

OVER n

Umożliwia nakładanie wypisywanego tekstu na inny, uprzednio wypisany. OVER 1 powoduje przejście do trybu, w którym tekst na ekranie jest wypisywany bez usuwania tekstów już tam istniejących. Wyjście z tego trybu następuje po wywołaniu OVER 0, zakończeniu wykonywania programu lub pojawieniu się komunikatu o błędzie.

SETCUR [12 3] PR "Jabłko

SETCUR [12 3] OVER 1 PR "Wisnia"

SETTC I

Ustalenie kolorów tła ekranu tekstowego i druku Parametrem jest lista dwuelementowa liczb z zakresu 0..8, określająca te kolory.

SETTC  [0 23]

PR [Czerwone i czarne]

*/ W różnych wersjach LOGO w różny sposób ustalono zasady pisowni słów, będących parametrami TO i EDIT; czasami należy poprzedzić je znakiem cudzysłowu ", kiedy indziej nie. W Sinclair LOGO prawidłowa jest forma:

EDIT ALFA TO ALFA

z kolei np w DR LOGO na CPC464 napiszemy TO ALFA

ale ED "ALFA

 

Marcin Waligórski