# What is Logo?

What is the programming language Logo?
I've heard it referred to as god's programming language, but what is it?

It is the language Scratch and Snap! are based on. You could read about it on Brian's webpage or Wikipedia.

Um, I think that was Scheme.
Edit: Yep, confirmed, quoting Brian-

Scheme (God's programming language, of which is a dialect)...

.

Alright then, what is scheme?

Logo is a programming language that uses turtle geometry to move an object around the screen and draw on it, like sprites in Snap! or Scratch. Scheme is a programming language that has first-class procedures, continuations and linked lists, something that Scratch (and I think Logo[citation needed]) don't have. Snap! uses ideas from both Logo and Scheme.

Wow I haven't read the forum in 15 hours.

Besides the turtle graphics for which it is famous (available in pretty much all languages by now, in a library if not native), Logo (whose name comes from the Greek word for "word") includes built in support for manipulating words and sentences. So for example:

? print first [Yakko Wakko Dot]
Yakko


The first element of the sentence is a word, not a letter.

? print first "Yakko
Y


There's a different notation to include a word in Logo code. It uses a single quotation mark because a space ends the word (unless escaped).

Another big difference is that Logo is dynamically scoped, which is rare these days because lexical scoping (as used in Snap!) is thought to be less bug-prone, and is also much faster when the language is compiled (unlike Snap!, but maybe someday). Logo people argue that dynamic scope is easier for beginners to understand (if a variable exists right now, you can always use it in your code) and also makes debugging easier (too long a topic for a forum post but you can look it up in the History of Logo article, section 3.7).

Logo definitely has first class linked lists. As for first class procedures, it's a little tricky because with dynamic scope any list with Logo instructions is a procedure, so we can do this:

? print map [? + 3] [7 8 1]
10 11 4


The question mark was as close as I could come in a text language to Snap!'s empty input slot. (This was in the days before Unicode. Today I'd probably have some keyboard shortcut for the ⃞ character.) So the list [? + 3] is exactly equivalent to even though technically it's a list, rather than a procedure.

Wait, why can't I call this a solution?
What happened to the solution button?

Only some categories (notably "help with") have Solution buttons.