Programmverwaltung

  1. Prozeduren
  2. Variablen

Prozeduren

[Programmverwaltung] [Inhalt]


to

Syntax

TO prozedurname
TO prozedurname :parameter1 :parameter2 ...

Beschreibung

Kennzeichnet den Beginn einer Prozedurdefinition. Die neue Prozedur wird den angegebenen Namen haben, ihre Parameter werden parameter1, parameter2 usw. heißen. Es können beliebig viele Parameter (auch 0) angegeben werden. Wenn bereits eine selbstdefinierte Prozedur mit dem angegebenen Namen existiert, wird sie überschrieben. Eingebaute Prozeduren können nicht überschrieben werden.

TO muß außerhalb von Prozeduren und als eigenständige Anweisung stehen, d.h. TO darf kein Parameter einer anderen Prozedur sein (z.B. in einer repeat-Schleife). Außerdem muß TO mit allen seinen Parametern in einer Zeile stehen.

Anders als alle anderen Logo-Prozeduren wertet TO seine Parameter nicht aus, sondern nimmt sie so, wie sie eingegeben werden:
PRINT gruß
führt zum Fehler, da PocketLogo versucht, die Prozedur gruß auszuwerten - was nicht gelingt; will man "gruß" ausgeben, muß man den Parameter von PRINT zu einem Wort machen: PRINT "gruß. Dagegen ist TO gruß :name der korrekte Beginn der Definition einer Prozedur mit dem Namen gruß, die einen Parameter namens name erwartet.
Der Doppelpunkt vor name meint nicht, dass name eine Variable ist (die Parameter von TO werden schließlich nicht ausgewertet), sondern soll lediglich eine Unterscheidung zwischen dem Namen (gruß) und dem Parameter (name) der neuen Prozedur erleichtern. Der Doppelpunkt deutet außerdem an, dass name innerhalb der neuen Prozedur eine lokale Variable sein wird, deren Wert man mit :name erhält.

Alle nun folgenden Zeilen werden Teil der neuen Prozedur, bis eine Zeile, die nur die Anweisung END enthält, folgt. Der komplette TO-END-Block muß "auf einmal" ausgewertet werden, also komplett im Eingabefeld stehen.

Die Anweisungen der neuen Prozedur werden gespeichert, aber nicht ausgewertet - es ist also auch möglich, in der neuen Prozedur weitere, (noch) unbekannte Prozeduren und (noch) nicht belegte Variablen zu verwenden. Lediglich Syntaxfehler wie z.B. fehlende Klammern werden abgefangen.

Beispiel

TO gruß :name
 (PRINT "Hallo :name ".)
 PRINT [Wie geht es dir?]
END

gruß "Max
Hallo Max.
Wie geht es dir?

[Prozeduren] [Programmverwaltung] [Inhalt]


define

Syntax

DEFINE prozedurname variablenliste rumpf

Beschreibung

Definiert eine neue Prozedur mit dem angegebenen Namen. Es darf noch keine Prozedur mit dem angegebenen Namen existeren. Variablenliste ist eine Liste, die nur Worte enthält - dies werden die Parameternamen der neuen Prozedur. Falls die neue Prozeudr keine Parameter erwarten soll, ist variablenliste als leere Liste [] zu setzen. Rumpf ist eine Liste, die beliebige Anweisungen enthält - dies wird der Inhalt der neuen Prozedur.

Die Anweisungen der neuen Prozedur werden gespeichert, aber nicht ausgewertet - es ist also auch möglich, in der neuen Prozedur weitere, (noch) unbekannte Prozeduren und (noch) nicht belegte Variablen zu verwenden. Lediglich Syntaxfehler wie z.B. fehlende Klammern werden abgefangen.

Beispiel

DEFINE "gruß ["name1 "name2] [
 (PR "Hallo :name1 "und :name2 ".)
 PR [Wie geht es euch?]
 ]

gruß "Max "Lisa
Hallo Max und Lisa.
Wie geht es euch?

[Prozeduren] [Programmverwaltung] [Inhalt]


eraseproc

Syntax

ERASEPROC prozedurname
ERP prozedurname

Beschreibung

Löscht die Prozedur mit dem angegebenen Namen. Falls keine solche Prozedur existiert, tut ERASEPROC nichts.

Beispiel

TO test
 print "hallo
END

test
hallo

ERP "test
test
Ich kenne den Befehl test nicht

[Prozeduren] [Programmverwaltung] [Inhalt]


save

Syntax

SAVE

Beschreibung

Speichert alle selbstdefinierten Prozeduren, Variablen, Wände und Äpfel sowie die Position der Turtle in eine Datei, deren Name der Benutzer über ein Dialogfeld festlegen kann.

Siehe auch LOAD.

Beispiel

SAVE

[Prozeduren] [Programmverwaltung] [Inhalt]


load

Syntax

LOAD

Beschreibung

Lädt die zuvor mit SAVE gespeicherten selbstdefinierten Prozeduren, Variablen, Wände und Äpfel sowie die Position der Turtle aus einer Datei, die der Benutzer über ein Dialogfeld wählen kann. Hinweis: Der Skalierungsfaktor muss der gleiche sein wie zum Zeitpunkt des Speicherns, ansonsten wird auch die neue Turtleposition skaliert. Die Wände und Äpfel werden nicht vom Skalierungsfaktor beeinflusst.

Beispiel

LOAD

[Prozeduren] [Programmverwaltung] [Inhalt]


Variablen

[Programmverwaltung] [Inhalt]


make

Syntax

MAKE varname wert

Beschreibung

Weist der Variablen mit dem Namen varname den angegebenen Wert zu.

Falls die Variable schon existiert, wird der alte Wert überschrieben. Wenn die existierende Variable lokal ist, bleibt sie das auch. Falls die Variable nicht existiert, wird eine neue globale Variable erstellt (Global heißt, dass diese Variable im gesamten Programm zugänglich ist).

Beispiel

MAKE "wert1 2
PR :wert1
2

MAKE "wert2 PRODUCT 2 3
PRINT :wert + :wert2
8

[Variablen] [Programmverwaltung] [Inhalt]


name

Syntax

NAME wert varname

Beschreibung

Weist der Variablen mit dem Namen varname den angegebenen Wert zu.

Falls die Variable schon existiert, wird der alte Wert überschrieben. Wenn die existierende Variable lokal ist, bleibt sie das auch. Falls die Variable nicht existiert, wird eine neue globale Variable erstellt (Global heißt, dass diese Variable im gesamten Programm zugänglich ist).

NAME entspricht also MAKE mit vertauschen Parametern.

Beispiel

NAME 2 "wert
PR :wert
2

[Variablen] [Programmverwaltung] [Inhalt]


local

Syntax

LOCAL varname
(LOCAL varname1 varname2 ...)

Beschreibung

Deklariert neue lokale Variablen mit den angegebenen Namen. LOCAL kann nur innerhalb einer Prozedur aufgerufen werden. Lokale Variablen sind verfügbar in der Prozedur, in der sie erzeugt wurden, sowie in allen Prozeduren, die von dieser Prozedur aufgerufen werden. Falls bereits eine globale oder eine übergeordnete lokale Variable gleichen Namens existert, wird sie von der neuen Variable überdeckt (nicht überschrieben): Auf die übergeordnete Variable kann erst zugegriffen werden, nachdem der Gültigkeitsbereich der neuen Variable verlassen wurde.

Falls im selben Kontext (in der gleichen Prozedur) schon eine lokale Variable gleichen Namens erzeugt wurde, tut LOCAL nichts (der Wert bleibt erhalten).

Local weist der neuen Variablen keinen Wert zu; dies muss anschließend z.B. mit MAKE geschehen. Siehe auch LOCALMAKE.

Beispiel

TO proz1
 MAKE "global 1
 PRINT :global
END

proz1
1
PRINT :global
1

TO proz2
 LOCAL "lokal
 MAKE "lokal 2
 PRINT :lokal
END

proz2
2
PRINT :lokal ;Die Variable "lokal" ist hier nicht mehr zugänglich
Fehler im befehl print :lokal:
lokal hat keinen Wert.

[Variablen] [Programmverwaltung] [Inhalt]


localmake

Syntax

LOCALMAKE varname wert

Beschreibung

Dies eine Kurzschreibweise für

LOCAL "varname
MAKE "varname wert

Für weitere Informationen siehe LOCAL und MAKE.

Beispiel

TO FOO
 LOCALMAKE "var 55
 PRINT :var
END

FOO
55
PRINT :var ;Die Variable "var" ist hier nicht mehr zugänglich
Fehler im Befehl print :var:
var hat keinen Wert.

[Variablen] [Programmverwaltung] [Inhalt]


thing

Syntax

THING varname
:varname

Beschreibung

Liefert den Wert der Variablen mit dem angegebenen Namen zurück. Falls mehrere solcher Variablen existieren, wird der Wert der innersten zurückgeliefert. Falls keine solche Variable existiert, wird ein Fehler geworfen.

Die Notation :varname ist eine abkürzende Schreibweise von THING "varname.

Die Verwendung von THING hat gegenüber der Doppelpunktnotation in einigen Situationen Vorteile: Zum Beispiel, wenn auf eine Variable zugegriffen werden soll, deren Name wiederum als Variable gegeben ist (siehe das folgende Beispiel).
Die Prozedur ERHOEHE bekommt den Namen einer Variable übergeben und erhöht den Wert dieser Variablen um 1. Dies wäre mit der Doppelpunktnotation nicht möglich.

TO ERHOEHE :var
 MAKE :var (THING :var) + 1
END

MAKE "x 1
PR :x
1
ERHOEHE "x
PR :x
2

Beispiel

MAKE "x 3
PR THING "x
3
PR :x
3

[Variablen] [Programmverwaltung] [Inhalt]


erasevar

Syntax

ERASEVAR varname
ERV varname

Beschreibung

Löscht die Variable mit dem angegebenen Namen. Falls mehrere solcher Variablen existieren, wird nur die innerste gelöscht. Auch wenn ERASEVAR mit dem gleichen Variablennamen mehrmals aufgerufen wird, wird nur beim ersten Aufruf die innerste Variable diesen Namens gelöscht, danach tut ERASEVAR nichts mehr. Dies verhindert, dass Variablen, die eigentlich verdeckt wurden, gelöscht werden können. Bei mehreren Variablen gleichen Namens ist es ebenso nicht möglich, durch Löschen der innersten Variable auf die (eigentlich von dieser verdeckten) nächstäußeren oder globalen Variable zuzugreifen, wie das folgende Beispiel zeigt. Das letzte PRINT in foo verursacht den Fehler, denn die globale Variable x muß weiterhin von der lokalen Variablen x verdeckt sein. Wie das abschließende PRINT zeigt, ist die globale Variable x außerhalb von foo wieder zugänglich und unverändert.

TO foo
 LOCALMAKE "x 500
 PR :x
 ERASEVAR "x
 PR :x
END

MAKE "x 3
foo
500
Fehler in der Prozedur foo, im Befehl pr :x:
x hat keinen Wert in foo.

PR :x
3

Beispiel

MAKE "x 3
PR :x
3
ERV "x
PR :x
Fehler im Befehl pr :x:
x hat keinen Wert.

[Variablen] [Programmverwaltung] [Inhalt]


Diese Seite gehört zum Internetauftritt von PocketLogo.

PocketLogo wird gehostet von

Get PocketLogo at SourceForge.net. Fast, secure and Free Open Source software downloads