Introdução ao LOGO

A Rainha abandonou então a partida, quase sem fôlego, e perguntou a Alice: 
- Você já viu a Falsa Tartaruga?
- Não - respondeu Alice. - Nem sei o que é uma Falsa Tartaruga.
- É aquilo de que se faz a falsa sopa de tartaruga - informou a Rainha.
- Nunca vi, e nunca ouvi falar - confessou Alice.
- Venha então - disse a Rainha. - Ela lhe contará sua história.
L. Carrol, Alice no País das Maravilhas


Logo e a Tartaruga

A linguagem de programação Logo foi projetada para ser um instrumento de aprendizagem - algo que estudantes usam para aprender outras coisas. Ela é uma linguagem poderosa (é um dialeto do LISP) e fácil de usar, criada nos anos 60 por Wallace Feurzeig, Daniel Bobrow e Seymour Papert. Este último, um matemático que colaborara com Piaget, tornou-se o principal inspirador do uso do Logo como meio de aprendizagem. Em suas primeiras versões o Logo podia controlar os movimentos de um pequeno robô, chamado de "tartaruga" devido à sua forma, e que acabou tornando-se a marca registrada da linguagem. Com o desenvolvimento de terminais gráficos de baixo custo a tartaruga mudou-se para a tela do computador, onde pode mover-se de forma mais rápida e precisa.


O Ambiente Logo

Logo é uma linguagem interativa e interpretada. Um comando Logo pode ser executado isoladamente, sem a necessidade de fazer parte de um programa completo. À medida em que as linhas de comando são escritas o ambiente Logo as "interpreta" (traduz) para o computador e ordena a sua execução.

A maioria dos ambientes Logo divide a tela do computador em pelo menos duas regiões: aquela onde são escritos os comandos, e outra onde a tartaruga se move. Como estas áreas estão arranjadas depende da implementação de Logo que estamos usando. A própria linguagem varia um pouco de uma implementação para outra. Para simplificar vamos centrar nossa discussão no SuperLogo, um Logo adaptado para o português pelo Núcleo de Informática Aplicada à Educação (NIED) da UNICAMP. O SuperLogo é distribuído gratuitamente pela internet (http://www.nied.unicamp.br).

A área de comandos do SuperLogo fica na base da tela, em uma janela que contém duas caixas de texto e vários botões. A caixa inferior é a caixa de entrada, onde são digitados os comandos a serem executados. Em cima dela está a caixa de saída, onde o Logo mantém uma lista dos comandos já executados e escreve suas mensagens de erro. A caixa de saída também é usada por comandos que escrevem alguma coisa. Por exemplo, digite na caixa de entrada

escreva [alô mundo]

e aperte a tecla <Enter> ou o botão "EXECUTAR". Note que na caixa de saída aparecem o comando que foi digitado e o resultado da sua execução (se nada deu errado). Tente também

escreva 1+1
escreva raizq 9


Movimentos da Tartaruga

Uma das características do Logo é a existência de um objeto - a tartaruga - cujos movimentos são controlados por comandos da linguagem. A tartaruga é geralmente um pequeno desenho que pode se deslocar pela tela do computador, mas nada impede que ela seja, como nas primeiras versões do Logo, um robô que anda pelo chão.

Para ter uma idéia dos comandos Logo que movimentam a tartaruga, digite na caixa de entrada

parafrente 50

Com isto a tartaruga deve andar 50 passos (pontos da tela) para a frente. Escreva agora

paraesquerda 90

Note que a tartaruga girou 90 graus para a esquerda. Tente também

paratrás 80
paradireita 270

Estes são os comandos básicos para mover a tartaruga. Como muitos outros comandos Logo, eles podem ser escritos de forma abreviada: 

parafrente = pf 
paratrás = pt 
paraesquerda = pe 
paradireita = pd

A tartaruga deixa um rastro por onde passa, como se estivesse usando um lápis. Se queremos movê-la sem desenhar, empregamos o comando usenada. Verifique o que acontece com

usenada
pf 50

A tartaruga deve ter andado sem deixar rastros. Se quisermos voltar a desenhar sobre a tela usamos o comando uselápis. Por exemplo:

uselápis
pt 70

A tartaruga pode ficar invisível. Para isto basta executar o comando

desapareçatat

Para torná-la visível execute

apareçatat

Para limpar a tela, apagando todos os desenhos, e recolocar a tartaruga na sua posição inicial use o comando

tartaruga

que pode ser abreviado para tat. Ou simplesmente aperte o botão "TAT" que está ao lado da caixa de saída. 


Repetições

Podemos fazer a tartaruga desenhar um quadrado com as instruções (note como é possível escrever mais de um comando Logo por linha)

pf 50 pe 90
pf 50 pe 90
pf 50 pe 90
pf 50 pe 90

Entretanto é bem mais simples usar o comando repita

repita 4 [pf 50 pe 90]

Um triângulo pode ser traçado com

repita 3 [pf 50 pe 120]

e um retângulo é obtido através de 

repita 2 [pf 50 pe 90 pf 100 pe 90]

O comando contevezes (ou cv) fornece o número de repetições já realizadas pelo repita. Tente por exemplo

repita 3 [escreva contevezes]

ou

repita 200 [pf contevezes pe 90]

ou ainda

repita 720 [pf 10 pe contevezes]

e

repita 1800 [pf 10 pe contevezes + .1]

Dentro da lista de comandos do repita podem estar outros repita. Veja o que acontece com

repita 6 [pe 60 repita 4 [pf 50 pe 90]]

e

repita 8 [pd 45 repita 6 [repita 90 [pf 2 pd 2] pd 90]]

(mude o "6" por 1...7 para criar outras figuras surpreendentes).


Procedimentos

Uma das características mais importantes do Logo é a facilidade com que podemos estender a linguagem, criando novos comandos e operações (ou procedimentos). Por exemplo, vamos definir um comando chamado quadrado que desenha um quadrado na tela. Antes, vamos verificar se já não há um procedimento com este nome. Escrevendo 

quadrado 

na caixa de entrada obtemos como resposta a mensagem

AINDA NÃO APRENDI QUADRADO

ou seja, a tartaruga (ou melhor, o Logo) não conhece tal procedimento. Para definir o comando, clique em PROCEDIMENTO / EDITAR na barra de menu. Na janela que se abrir escreva o nome do procedimento que deseja definir - no caso, quadrado - e aperte o botão OK. A janela do editor de procedimentos aparecerá então, com o início e o fim da definição do procedimento quadrado já escritos:

aprenda quadrado
fim

A definição propriamente dita do procedimento deve ser inserida entre o aprenda e o fim. No nosso caso teríamos

aprenda quadrado
repita 4 [pf 50 pe 90]
fim

Escolha em seguida o ítem ÁREA DE TRABALHO / ATUALIZAR na barra de menu do editor e salve a definição do comando na memória do computador. Clicando em ÁREA DE TRABALHO / SAIR voce fecha o editor de procedimentos. Escreva agora 

quadrado 

na janela de comandos e mande executar. Ao invés de enviar uma mensagem de erro como antes, a tartaruga agora desenhará um quadrado de lado 50.

Esta definição de quadrado não é muito útil, pois obtemos sempre um quadrado do mesmo tamanho (50 pontos). Não podemos desenhar um quadrado de lado 100, ou 10. Seria melhor que quadrado fosse semelhante, por exemplo, ao comando parafrente, que tem um parâmetro que determina o tamanho do deslocamento. Assim, quadrado 100 faria um quadrado de lado 100. É fácil criar esta versão aperfeiçoada do comando. Para isto volte ao PROCEDIMENTO / EDITAR da barra de menu, e escolha o procedimento quadrado na janela de opções. O procedimento definido anteriormente vai aparecer na janela do editor. Mude-o para

aprenda quadrado :lado
repita 4 [pf :lado pe 90]
fim

e salve o resultado. Agora, se tentarmos

quadrado 100

ou

quadrado 10

obteremos quadrados de lados 100 e 10 respectivamente. Veja também o que acontece com

repita 50 [quadrado 2*contevezes]

Note que o número que segue o comando quadrado é atribuído à variável lado definida pelo procedimento. Os dois pontos que são escritos antes da palavra lado indicam que estamos interessados no valor da variável lado, e não em um comando de nome lado. Podemos ler :X como "o valor da variável X", ou "o conteúdo de X", ou ainda "a coisa que estamos chamando de X". 


Variáveis

Já que entramos no assunto de variáveis, vamos aprender como elas podem ser criadas e receber valores. Por exemplo, para definir uma variável de nome XY com valor 2 podemos usar

atribua "xy 2

Se mandarmos escrever o valor de XY,

escreva :xy

obteremos o número 2 na caixa de saída. Observe que se tentarmos

escreva "xy

teremos as letras XY como resposta. O papel das aspas é avisar ao Logo que o que vem depois delas deve ser considerado como uma palavra e não um comando. Se omitirmos as aspas e fizermos

escreva xy

ou

atribua xy 2

obteremos a mensagem de erro "AINDA NÃO APRENDI XY", ou seja, o Logo pensa que XY é um comando e avisa que tal comando não está definido. 

Vamos usar o comando atribua para definir um procedimento que fornece o fatorial de um número inteiro. O procedimento fat mostrado a seguir calcula n! fazendo o produto 1x2x3...n

aprenda fat :n
atribua "f 1
repita :n [atribua "f :f*contevezes]
envie :f
fim

Se fizermos em seguida o teste,

escreva fat 5

vamos obter 5! = 120. Observe o comando envie que usamos no procedimento acima - ele faz com que fat retorne como resultado o valor da variável f.


Operações matemáticas

Várias operações matemáticas estão definidas na linguagem Logo. Por exemplo, a exponenciação é feita com a operação potência :a :b, que retorna ab. Veja o que acontece com 

escreva potência 2 3

A raiz quadrada é dada por raizq, como já vimos. As funções trigonométricas seno, cosseno e tangente também estão definidas (sen, cos, tan), assim como as suas funções inversas (arcsen, arccos, arctan). Se executarmos

escreva sen 30

obtemos 0.5 como resposta. Vemos daí que os argumentos das funções trigonométricas são lidos em graus, não em radianos. Da mesma forma

escreva arctan 1

resulta em 45 (graus) e não em p /4 (radianos). Se queremos trabalhar com radianos em vez de graus devemos usar as funções senrad, cosrad, tanrad, e as inversas arcsenrad, arccosrad, arctanrad. Por exemplo 

escreva senrad pi/2

resulta em 1. Note que usamos no comando acima um procedimento, pi, que retorna o valor de p . Veja o que ocorre com

escreva pi

Figuras de Lissajous podem ser facilmente desenhadas com as funções trigonométricas. Por exemplo, execute a instrução

repita 360 [mudexy (100*sen 3*cv) (100*sen 4*cv)]

Observe que na instrução acima usamos um novo comando para mover a tartaruga - mudexy :a :b move a tartaruga até o ponto da tela de coordenadas (a, b). O ponto (0, 0) corresponde ao centro da tela.

Um procedimento particularmente interessante é sorteienúmero, que pode ser abreviado para sortnum. Executando sorteienúmero :n obtemos um número inteiro escolhido ao acaso entre 0 e n-1. Veja o que acontece com

repita 5 [escreva sortnum 10]

ou faça tartaruga andar ao acaso com

repita 500 [pf 10 pe sortnum 180]

O logaritmo natural e a função exponencial também estão definidos no Logo. Eles são dados pelos procedimentos ln e exponencial, respectivamente. Uma lista completa das funções matemáticas definidas no SuperLogo pode ser encontrada no ítem AJUDA da barra de menu.


Recursão

Procedimento Logo podem ser recursivos. Isto significa que eles são capazes de chamar a si próprios. Veja como podemos usar um procedimento recursivo para calcular o fatorial de N, usando apenas que N! = N x (N-1)! e 0! = 1. 

aprenda fatorial :n
se :n=0 [envie 1 pare]
envie :n*fatorial (:n-1)
fim

Note também o uso do comando se, que executa a lista de instruções dentro dos colchetes se a condição, no caso :n=0, for satisfeita. O comando pare termina a execução de um procedimento. Teste seu programa executando 

escreva fatorial 5

Um procedimento recursivo que envolve desenhos com a tartaruga está mostrado a seguir:

aprenda arvore :x
se :x<1 [pare]
pf :x
pe 20 
arvore :x/1.5
pd 40 
arvore :x/1.5
pe 20 
pt :x
fim

Veja o que acontece com

arvore 50

Outro procedimento recursivo é:

aprenda tri :x
se :x<3 [pare]
repita 3 [tri :x/2 pf :x pd 120]
fim

Executando

tri 200

a tartaruga desenha um fractal famoso.


Salvando seus procedimentos

Os procedimentos que você definiu após iniciar a sua sessão Logo estão guardados apenas na memória do computador. Se você terminar o programa Logo todos eles serão perdidos. Para salvá-los em um arquivo em disco vá para a barra de menu e selecione ARQUIVO / SALVAR COMO. Na caixa de diálogo que se abrir escolha o disco e pasta onde deseja salvar seus procedimentos, e o nome do arquivo que irá contê-los. Note que todos os procedimentos que estão na memória irão para este arquivo. Se você não deseja guardar algum procedimento, tem que apagá-lo da memória antes de salvar o resto. Isto é feito indo para PROCEDIMENTO / APAGAR na barra de menu e selecionando na caixa de diálogo que se abre os procedimentos que serão descartados. Em uma próxima sessão Logo os procedimentos salvos no arquivo podem ser carregados novamente para a memória, usando o menu ARQUIVO / ABRIR.


O que mais?

Há muito mais no Logo do que foi dito acima. Estas notas cobriram apenas uma pequena parte das características e recursos da linguagem. Muitos aspectos importantes, como a manipulação de listas (em certo sentido o "coração" do Logo) e comandos de controle não foram abordados. Uma visão mais completa da linguagem pode ser obtida com o programa de AJUDA do SuperLogo.
 
 

C.E.Aguiar
Fevereiro/01