[This is preliminary documentation and subject to change]
One of the most interesting feature of Logo is that most of the language elements are dynamic. And first let's see the variable scope.
In Logo, variables can be defined at global scope or at local scope. At global scope of course, any procedure can get and set value of a global variable. At local scope, the procedure where the variable is defined can handle the variable but, instead of most other programming language, any called procedure can handle variable in the same way. Liogo implement fully Logo variable scope. Here is a sample:
to called :other print :param end to calling :param print :glob called [Other parameter] ;print :other ; Error, "other" no longer exist here end make "glob [Global value] calling [Parameter] ;print :param ; Error, "param" no longer exist here
When you do a map in Logo, you launch a multiple call of the template mapped. So with just a single line of code you can call repeatedly a procedure. Let's see a first sample with a list:
to getfirsts :l output map "first :l end print getfirsts [Gnu Not Unix]
Here "map" means: call "first" on each item of the list and build a new list with the result, so the result of the "getfirsts" call is:
Map can also process words instead of list. Let's see how in a famous game: Hangman (this sample is taken from the Logo bible: Computer Science Logo Style, volume 1):
to hangletter :letter ifelse memberp :letter :guessed [output :letter] [output "_] end to hangword :secret :guessed output map "hangletter :secret end print hangword "potsticker [e t a o i n] print hangword "gelato [e t a o i n]
"hangword" procedure use a map to find letters and replace guessed letters in the word. Here, "map" means: call "hangletter" on each item of the secret param and build a new word with the result.
Note that Liogo support all form of template "named-procedure", "procedure-text", "named-slot" and "explicit-slot".
A dynamic statement is a statement created and run at runtime. Most of the Logo control structure (test, loop, ...) accept dynamic statements. Let's see some examples:
ifelse true :a :b repeat 4 :c run :d
Here "a", "b", "c" and "d" are variables containing Logo source. So, if "a" equal "[print 12]", result of the first line will be a print of the number 12
Liogo support all sort of dynamic statements, when Liogo encounter a dynamic statement at runtime it call again the compiler and run the resulting assembly.
LIOGO - GPL Copyright (c) 2005-2007 Lionel Laské