Introdução à Programação com o UCB Logo/Variáveis e Atribuições

Uma variável é um espaço de alocação aonde fica armazenada alguma informação e possui um identificador, um nome simbólico, associado. O nome da variável é a maneira usual de se referenciar o valor armazenado. Esta separação entre nome e conteúdo permite que o nome se utilizado de forma independente da informação exata armazenada que é representada pela variável. As variáveis podem ser criadas por um programa e durante a sua execução podem sofrer alterações nos valores que armazenam. O conceito de variável computacional é bem semelhante ao conceito de variável algébrica.

As variáveis podem possuir tipos diferentes e portanto armazenar informações de diferentes tipos. No Logo exitem três tipos:

  1. palavra
  2. lista
  3. arranjo

obs.: Um número é um caso específico de palavra. O interpretador detecta automaticamente qual é o tipo da variável sendo utilizada através do contexto. Por este motivo, em Logo, a declaração de uma variável deve ser feita juntamente com a atribuição.

Por exemplo, o código abaixo declara a variável x e atribui a ela o valor 3. Em Logo as atribuições são feitas através do comando make.

make "x 3

Dois símbolos são importantes:

  1. dois pontos (:) - significa o conteúdo de.
  2. aspas duplas (") - significa o valor após avaliação

(The doublequote (") means the word is evaluated as itself, or its value after evaluation is the same as it was before. This is important. For users from other programming languages: the doublequote is not paired as opening and closing quotes.)

O Logo distingue procedimentos de variáveis. Um procedimento é um conjunto de instruções para realizar certo cálculo; uma variável é contêiner com determinado nome que armazena algum dado, como um número, uma palavra, uma lista ou arranjo. Na sintaxe do Logo essa distinção é feita através da utilização das aspas duplas ("). Quando uma palavra não-numérica é utilizada, estamos nos referindo a um procedimento cujo nome dada é a palavra em questão; quando utilizamos uma palavra precedida por aspas duplas, estamos nos referindo à própria palavra. Desta forma, o exemplo abaixo possui duas referências a procedimentos (print e first) e uma referência a uma palavra word que será utilizada como entrada para o procedimento first.

print first "word

A linguagem Logo é uma linguagem funcional na qual palavras normalmente são tratadas como símbolos e não podem ser modificadas. As variáveis são os símbolos que representam um determinado valor a elas associado. Podemos utilizar as variáveis para dois fins: atribuir a elas um valor; e recuperar o valor a elas associado. Para fazer a atribuição devemos utilizar o comando make, que recebe dois parâmetros de entrada: o nome da variável (que deve ser precedido por aspas duplas) e o valor que a ela será associado. Veja o exemplo:

make "myvariable first "word

A palavra word será o argumento de entrada do procedimento first, que por sua vez retornará a letra w, que será o valor atribuído à variável myvariable.

Para descobrir o valor associado a uma variável, o Logo possui uma função chamada thing que recebe como argumento o nome da variável e retorna o valor a ela associado. Como este é um procedimento muito comum, existe uma forma abreviada de fazer isto, que é utilizando os dois pontos (:) antes do nome da variável. No exemplo abaixo as duas linhas fornecem o mesmo resultado.

print thing "myvariable
print :myvariable

Após ler a explicação acima, você agora é capaz de entender o código abaixo e sabe que a primeira linha é na verdade uma forma resumida de se fazer o que está na segunda linha do exemplo abaixo. Isto explica a razão pela qual vemos em Logo variáveis antecedidas por (") e variáveis antecedidas por (:).

make "var2 :var1
make "var2 thing "var1

Muitas outras linguagens de programação não utilizam nenhum carácter precedendo o nome de variáveis ou funções para referenciá-las, desta forma, estas linguagens não podem ter procedimentos e variáveis com o mesmo nome. No Logo isto é possível. Veja o exemplo abaixo onde isto ocorre duas vezes.

? to plural :word
> output word :word "s
> end
plural defined
? print plural "plural
plurals

Se fizermos qualquer um dos dois exemplos abaixo, nenhum deles alterará o valor de x para 4.

make x 4
make :x 4

Se quisermos adicionar um ao valor atual de x, podemos fazer de duas formas:

make "x :x+1
make "x x+1

Uma string é uma sequência de caracteres. Uma varável em Logo pode conter uma string, como podemos ver no exemplo abaixo

? print [Hello, Word!]
Hello, Word!

Note que, se fizermos a atribuição conforme o exemplo abaixo, o valor atribuído à variável x será uma string contendo a sequência de caracteres 1 [espaço] 2 [espaço] 3. Note então que obteremos um erro ao tentar adicionar 1 à variável x.

? make "x [1 2 3]
? make "y x+1
+ doesn't like [1 2 3] as input

A linguagem Logo é uma linguagem funcional na qual palavras normalmente são tratadas como símbolos e não podem ser modificadas. Por este motivo, ao fazer como no exemplo abaixo, estamos dizendo que o símbolo (variável) a é igual ao símbolo foo e da mesma forma o símbolo b é igual ao símbolo foo. Neste caso, isto não significa que os valores dos símbolos são os mesmos, mas sim que os símbolos são iguais.

make "a "foo
make "b "foo
print .eq :a :b   ; true, identical symbols are reused


make "c :a
print .eq :a :c   ; true, copy a reference
 
make "c word :b "||  ; force a copy of the contents of a word by appending the empty word
print equal? :b :c   ; true
print .eq :b :c     ; false


Para criar um vetor (arranjo), devemos utilizar o comando array e informar o tamanho do arranjo que desejamos criar. O exemplo abaixo ilustra como declarar um vetor e como atribuir valores aos seus elementos.

? make "vetor array 10
? print :vetor
{[] [] [] [] [] [] [] [] [] []}
? setitem 1 :vetor 0
? print :vetor
{0 [] [] [] [] [] [] [] [] []}
? setitem 2 :vetor 1
? setitem 3 :vetor 2
? setitem 4 :vetor 3
? print :vetor
{0 1 2 3 [] [] [] [] [] []}