UCBLogo

Origem: Wikipédia, a enciclopédia livre.


UBCLogo

UBCLogo permite por recursão, o processo onde um procedimento chama a si mesmo. Na imagem, uma espiral produzida por um script recursivo.
Paradigma multiparadigma: funcional, educacional, procedural, reflexiva
Surgido em 1992
Criado por Brian Harvey
Estilo de tipagem dinâmica
Influenciada por Lisp
Influenciou Smalltalk, Etoys, Scratch, NetLogo, KTurtle, REBOL

UCBLogo, também conhecido como Berkeley Logo, é bastante próximo de uma linguagem de programação Logo padrão, com suas facilidades para manipular listas, arquivos, entrada e saída e recursão em scripts[1], podendo ser utilizado para ensinar a maior parte dos conceitos científicos, como o professor Brian Harvey, da Universidade da Califórnia em Berkeley fez em sua trilogia Computer Science Logo Style[2].

Interface[editar | editar código-fonte]

O UCBLogo possui uma interface gráfica bastante rudimentar. Alguns projetos semelhantes fornecem uma interface mais aprimorada. O MSWLogo e o seu sucessor FMSLogo, para Microsoft Windows, são usados em algumas escolas do Reino Unido e da Austrália. Também há soluções em software livre, como o KTurtle.

Design[editar | editar código-fonte]

A linguagem Logo foi projetada com o espírito de "piso baixo e teto alto", que possibilita acesso fácil aos novatos e atende às necessidades de usuários avançados. As animações exigem habilidades de desenhar e de apagar formas. O processo é o mesmo, exceto que naquela uma linha é registrada no visor e nesta uma linha é removida. Usando-se a analogia da tartaruga, a sua caneta precisa pintar e precisa apagar. A tartaruga pode ser configurada para apagar tudo abaixo dela, através do comando PENERASE (PE), enquanto a caneta pode ser configurada para começar a desenhar novamente com o comando PENPAINT (PPT).

A caneta[editar | editar código-fonte]

Tartaruga desenhando uma linha pontilhada

A analogia de uma tartaruga com uma caneta presa à sua cauda é frequentemente usada. A caneta da tartaruga pode ser levantada e baixada, desenhando, assim, uma linha pontilhada.

Um código de exemplo:

FD 20 ; movimento de 20 passos à frente e traçado de uma linha reta
PENUP ; levantar a caneta, então ela não desenhará coisa alguma
FD 20 ; movimento de 20 passos à frente, sem traço
PENDOWN ; baixar a caneta, então ela desenha novamente
FD 20 ; movimento de 20 passos à frente e traçado de uma linha reta
PENUP ; levantar a caneta, então ela não desenhará coisa alguma
FD 40 ; movimentar, sem traçar
PENDOWN ; baixar a caneta, então ela desenha novamente
RT 20 ; girar 20 graus para a direita

Dados[editar | editar código-fonte]

O UCBLogo possui três tipos de dados:

  • a palavra
  • a lista
  • a matriz

Um número é um caso especial de palavra.

Não há tipagem estática. O interpretador detecta o tipo de dados pelo contexto.

Há dois símbolos importantes:

  • Dois pontos (:) significa o conteúdo de. Esse é um símbolo extremamente útil que lembra aos estudantes que uma variável é realmente algum 'lugar' na memória.
  • As aspas (") significam a palavra é avaliada como ela mesma, ou seu valor após a avaliação é o mesmo que era antes. Para usuários de outras linguagens de programação: As aspas não são emparelhadas como aspas simples que abrem e que fecham.

Um número é um tipo especial de auto-avaliação: ele realmente pode ser escrito com uma aspa simples. 2 é realmente "2.

A atribuição de variáveis (por exemoplo: x := y + 3) é tratada no Logo com o comando make, como exemplificado por essas duas afirmações equivalentes:

make "x sum :y 3
make "x sum :y "3

make recebe dois parâmetros, o segundo dos quais aqui é sum :y "3. sum recebe dois 'parâmetros' e é uma 'operação', por conseguinte, o cálculo é possível. "3 é avaliado para 3, e :y recebe os conteúdos da coisa chamada y, estas são somadas, devolvendo um número.

O efeito de make é colocar o resultado no primeiro parâmetro. De uma perspectiva programática, o primeiro argumento de make é passado por referência, enquanto que o segundo é passado por valor.

Escopo[editar | editar código-fonte]

Variáveis não precisam ser declaradas antes de seu uso; seu escopo é, então, global.

Uma variável pode ser declarada local, aí seu escopo é limitado àquele procedimento e a quaisquer procedimentos que ele chamar (também conhecido como escopo dinâmico). Chamar um procedimento com entradas (o nome geralmente utilizado para argumentos na literatura Logo) também cria variáveis locais que contém os valores dos argumentos.

Listas[editar | editar código-fonte]

O Logo herda as listas do Lisp, e elas são seu método primário de armazenar vetores. Matrizes também são fornecidas.

  • Operadores existem para converter palavras em listas e listas em matrizes, bem como o caminho inverso.
  • Esse tipo de dados possui a vantagem sobre as matrizes, que são infinitamente expansíveis. Os dados são extraídos usando as operações em primeiro lugar, butfirst, último, butlast, butmember, membro e item. Elementos de dados são adicionados usando as sentenças fput e lput.
  • Uma lista pode ser considerada uma fila com os operadores queue e dequeue, ou uma pilha com as operações push e pop.
  • Recursão, em vez da iteração, é o método natural para processar listas.

Comandos de controle de estrutura[editar | editar código-fonte]

O Logo fornece muitas estruturas de controle comuns.

Existe uma estrutura de seleção:

  • ifelse teste [ lista de instruções se verdadeiro ] [ lista de instruções se falso ]

Há três comandos de iteração:

  • while condição [ lista de instruções ]
  • until condição [ lista de instruções ]
  • repeat número [ lista de instruções ]

A Recursividade é o paradigma de processamento preferido do Logo.

Modelo de iteração[editar | editar código-fonte]

O Logo também fornece estruturas de controle baseadas em listas. A ideia básica é de duas listas:

OPERATION [ uma lista de comandos ] [ muitos itens de dados ]

cada comando é aplicado por sua vez a cada um dos itens de dados. Há muitos desses comandos modelo com nomes como MAP, APPLY, FILTER, FOREACH, REDUCE e CASCADE. Eles representam quatro tipos de modelos de iteração, conhecidos como ranhura explícita, procedimento nomeado, ranhura nomeada (ou Lambda) e procedimento-texto.

Listas de propriedades[editar | editar código-fonte]

Uma lista de propriedades é uma lista especial onde os itens ímpares são nomes de propriedades e os pares são seus respectivos valores. Existem três comandos para processar listas de propriedades:

pprop :listname :name :value ;para adicionar um novo par à lista
remprop :listname :name :value ;para remover um par da lista
show gprop :listname :name  ;para obter o valor correspondente da lista

Entrada/Saída[editar | editar código-fonte]

O texto pode ser escrito para a janela de comandos (fluxo de saída) utilizando-se print e para a janela gráfica utilizando-se label.

Os comandos padrão são readlist readword readchar com o fluxo de entrada normal sendo o teclado. Na tradição Unix, o fluxo de entrada pode ser modificado, logo a entrada pode vir de um arquivo em disco. Similarmente, a saída pode ser redirecionada.

Sintaxe[editar | editar código-fonte]

Os Comandos podem ser escritos em uma ou mais linhas. Muitos comandos possuem formas mnemônicas curtas; por exemplo FORWARD e RIGHT são codificados FD e RT respectivamente. Isso torna a entrada abreviada. Qualquer coisa escrita após o ; (ponto-e-vírgula) é ignorada, permitindo ao programador inserir comentários.

; Desenha um quadrado com lados de 100 unidades de comprimento
FORWARD 100
LEFT 90
FORWARD 100
LEFT 90
FORWARD 100
LEFT 90
FORWARD 100
LEFT 90
FD 100 RT 120 FD 100 RT 120 ; desenha um triângulo
FD 100 RT 120

O programa Alô mundo em Logo parece com:

print [Alô mundo]

Loops[editar | editar código-fonte]

Existem três comandos de loop (repetição):REPEAT é um deles. O código a seguir desenha um quadrado:

REPEAT 4 [FD 100 LEFT 90]

O comando FD 100 LEFT 90 é executado quatro vezes.

Uma aproximação de um círculo pode ser construída facilmente com 360 pequenas rotações e um passo adiante: REPEAT 360 [FD 1 RIGHT 1]. Os loops podem ser alinhados, fornecendo resultados significativos com pequeno esforço.

REPEAT 36 [RT 10 REPEAT 360 [FD 1 RT 1]]
FD 25
RT 90

Outro exemplo de loops alinhados:

REPEAT 36 [REPEAT 4 [FD 100 RT 90] RT 10]

Funções e procedimentos[editar | editar código-fonte]

Cada linha é composta de chamadas de funções, ou subrotinas na terminologia da programação, das quais existem dois tipos:

  • comandos (que fazem algo mas não retornam um valor) como print.
  • operações (que apenas retornam um valor, sua saída) como sum, first ou readlist.

Um comando é similar a um procedimento da linguagem Pascal e uma operação é similar a uma função dessa linguagem. Um subconjunto especial de operações, chamados predicados, que apenas retornam a palavra true ou false sao convenientemente escritos com um p final. Exemplos incluem emptyp, wordp, e listp.

  • As expressões podem ser primitivas, ou podem ser definidas pelo usuário.
  • Expressões podem ter zero, um ou mais parâmetros.
Uma cadeira básica

Os Procedimentos podem ser definidos na linha de comando, usando-se o par TO END :

TO CHAIR  REPEAT 4 [FD 100 RT 90]  FD 200  END

No entanto, em algumas das primeiras versões do Logo, o procedimento é limitado ao comprimento físico da linha do dispositivo de entrada.

Todos os ambientes Logo podem invocar um editor, geralmente através de EDALL. No editor, os procedimentos podem ser escritos em várias linhas, pois nada é interpretado até a edição estar completa.

EDALL
TO CHAIR
REPEAT 4 [FD 100 RT 90]  FD 200
END

A nova palavra é salva no vocabulário disponível, mas a definição será perdida uma vez que a sessão do Logo acabar. Internamente, os procedimentos são palavras e, neste caso, toda vez que CHAIR for introduzida, a sequência REPEAT 4 [FD 100 LEFT 90] FD 200 será executada. A palavra CHAIR pode ser usada como um comando; por exemplo, REPEAT 4 [CHAIR] repetiria a operação CHAIR quatro vezes.

EDALL ;(para entrar no modo edição, depois no procedimento atual)
TO ERASECHAIR
PE
BK 200 REPEAT 4 [FD 100 RT 90]
PPT
END
CS CHAIR WAIT 200 ERASECHAIR

Uma espera WAIT entre o desenho e o apagamento pode introduzir a ilusão de movimento:

CS REPEAT 20 [CHAIR WAIT 200 ERASECHAIR PENUP FD 20 PENDOWN]

Argumentos/parâmetros[editar | editar código-fonte]

O Logo pode fornecer informação extra à suas palavras e retornar informação. O procedimento (palavra) é instruído para esperar algo e fornecer um nome. Os dois pontos são utilizados para esse propósito. Ele passa a informação por valor e os dois pontos são pronunciados como o valor de. Quando o procedimento é executado com um comando tal qual CHAIR 200, a palavra :thesize pega o valor 200, então quando FD :thesize é executado, o interpretador entende FD, o valor de 200.

EDALL ;(to enter the editor mode, then the actual procedure)
TO CHAIR :thesize
REPEAT 4 [FD :thesize RT 90]
FD :thesize
END
CS
REPEAT 9 [CHAIR 50 RT 20 CHAIR 100 WAIT 50 RT 20]

Pattern

Outras notas[editar | editar código-fonte]

A Matemática utiliza notação prefixada, como: sum :x :y, product :x :y, difference :x :y, quotient :x :y. A notação infixa também está disponivel.

help "keyword ;(trará uma descrição completa da expressão).


O Logo permite recursividade, que é o processo onde um procedimento chama a si próprio.

to spiral :size
   if  :size > 30 [stop] ; uma condição de saída
   fd :size rt 15        ; muitas linhas de ação
   spiral :size *1.02    ; the tailend recursive call
end
spiral 10

Ver também[editar | editar código-fonte]

  • Este artigo foi inicialmente traduzido, total ou parcialmente, do artigo da Wikipédia em inglês cujo título é «UCBLogo», especificamente desta versão.

Referências[editar | editar código-fonte]

  1. «Logo Programming Language at the Logo Foundation website». Consultado em 17 de janeiro de 2014. Arquivado do original em 15 de agosto de 2013 
  2. Computer Science Logo Style, Brian Harvey, MIT Press (3 volumes) ISBN 0-262-58148-5, ISBN 0-262-58149-3, ISBN 0-262-58150-7. Disponível online