Logo Programmeertaal

Interactiviteit

Hoewel er enkele versies van Logo zijn die compileren, wordt het over het algemeen geïmplementeerd als een geïnterpreteerde taal. De interactiviteit van deze aanpak geeft de gebruiker direct feedback op individuele instructies, wat helpt bij het debuggen en het leerproces. Foutmeldingen zijn beschrijvend.

Voorbeeld:

fowad

I don't know how to fowad (Het woord fowad is geen primitief — een van de ingebouwde woorden van Logo — noch een procedure die je zelf hebt gedefinieerd.)

forward

Not enough inputs to forward (Nu het correct gespeld is, kent Logo het woord forward, maar kan de instructie niet uitvoeren omdat forward aanvullende informatie nodig heeft.)

forward 100

(Logo is tevreden. Er is geen foutmelding. De schildpad beweegt 100 stappen vooruit.)

Modulariteit en Uitbreidbaarheid

Logo-programma's zijn meestal verzamelingen van kleine procedures. Over het algemeen worden procedures gedefinieerd door ze in een tekstverwerker te schrijven. Het speciale woord to wordt gevolgd door de naam van de procedure. De daaropvolgende regels vormen de definitie van de procedure. Het woord end geeft aan dat de definitie voltooid is.

In ons voorbeeld van schildpadgrafieken hebben we een procedure gedefinieerd om een vierkant te tekenen:

to square
  repeat 4 [forward 50 right 90]
end

En we hebben deze gebruikt als subprocedure van een andere procedure:

to flower
  repeat 36 [right 10 square]
end

Op dezelfde manier kan flower een bouwsteen zijn van iets groters:

to garden
  repeat 25 [set-random-position flower]
end

Hierbij is set-random-position geen primitief, maar random is dat wel, evenals setposition (of setpos of setxy). Je zou set-random-position ook kunnen schrijven met behulp van forward en right in combinatie met random.

Zodra een Logo-procedure is gedefinieerd, werkt deze hetzelfde als de Logo-primitieven. Sterker nog, als je naar Logo-programma's kijkt, is er geen manier om te weten welke woorden primitieven zijn en welke door de gebruiker zijn gedefinieerd, tenzij je die specifieke Logo-implementatie kent. In ons taalsample gebruikten we de procedure pick om willekeurig een item uit een lijst te selecteren, bijvoorbeeld in de procedure who:

to who
  output pick [Sandy Dale Dana Chris]
end

In sommige versies van Logo is pick een primitief, terwijl je het in andere versies zelf moet schrijven. who zou in beide gevallen er hetzelfde uitzien en op dezelfde manier werken.

Logo stelt je in staat om complexe projecten in kleine stappen op te bouwen. Programmeren in Logo gebeurt door de woordenschat uit te breiden en de taal nieuwe woorden te leren in termen van woorden die hij al kent. Op deze manier lijkt het op de manier waarop mensen een gesproken taal leren.

Flexibiliteit

Logo werkt met woorden en lijsten. Een Logo-woord is een reeks tekens. Een Logo-lijst is een geordende verzameling van woorden en/of lijsten. Getallen zijn woorden, maar ze zijn speciaal omdat je er zaken als rekenkundige bewerkingen mee kunt uitvoeren.

Veel programmeertalen zijn vrij strikt over het willen weten van het exacte type data dat wordt gebruikt. Dit maakt zaken gemakkelijker voor de computer, maar moeilijker voor de programmeur. Voordat je bijvoorbeeld twee getallen optelt, moet je mogelijk specificeren of het gehele getallen (integers) of reële getallen zijn. De computer heeft die informatie nodig. De meeste mensen denken hier echter niet over na, dus Logo regelt dit voor je. Wanneer er wordt gevraagd om een rekenkundige bewerking uit te voeren, doet Logo dit gewoon:

print 3 + 4
7

print 3 / 4
.75

Als je niet bekend bent met Logo maar wel met andere programmeertalen, kan de volgende reeks je verrassen:

print word "apple "sauce
applesauce

print word "3 "4
34

print 12 + word "3 "4
46

Hier is een recursieve procedure die factorials berekent:

to factorial :number
  if :number = 1 [output 1]
  output :number * factorial :number - 1
end

print factorial 3
6

print factorial 5
120

Hier is een procedure om een lijst met woorden om te keren:

to reverse :stuff
  ifelse equal? count :stuff 1
  [output first :stuff]
  [output sentence reverse butfirst :stuff first :stuff]
end

print reverse [apples and pears]
pears and apples

Voor meer voorbeelden kun je kijken naar de Logo-samples van Brian Harvey.

Verbeteringen

De zojuist geïllustreerde functies zijn gemeenschappelijk voor alle versies van Logo. Sommige Logo-implementaties bevatten uitgebreidere taalfuncties.

  • Er was een objectgeoriënteerde Logo genaamd Object Logo voor de Macintosh.
  • MicroWorlds Logo bevat multitasking, zodat meerdere onafhankelijke processen gelijktijdig kunnen worden uitgevoerd. Dezelfde functionaliteit is aanwezig in de software voor Control Lab, een LEGO Logo-product. Een nog massiever parallelle Logo is StarLogo.

In een traditionele Logo zou het commando aan de schildpad: repeat 9999 [forward 1 right 1] een tijd in beslag nemen om uit te voeren. De instructie: repeat 9999 [forward 1 right 1] print "HELLO zou ervoor zorgen dat het woord HELLO pas verschijnt nadat de schildpad klaar was met bewegen.

In MicroWorlds Logo zou het typen van: launch [repeat 9999 [forward 1 right 1]] print "HELLO de schildpad in beweging zetten. Het woord HELLO zou verschijnen zodra het eerste proces is gestart. Of: forever [forward 1 right 1] print "HELLO zou een proces starten dat doorgaat tot je het stopt. Ook hier zou het woord HELLO verschijnen zodra het schildpadproces is geïnitieerd.

Meer Informatie

Om meer te weten te komen over de Logo programmeertaal, kun je kijken naar het driedelige werk Computer Science Logo Style van Brian Harvey en Advanced Logo van Michael Friendly.

Als je geen Logo hebt en wilt beginnen, kun je de softwarepagina van de Logo Foundation bezoeken of direct UCBLogo, MSWLogo, FMSLogo, StarLogo TNG of StarLogo Nova downloaden.