# UCBLogo

UCBLogo, también conocida como Logo de Berkeley, es más parecido a un lenguaje estándar de facto de programación Logo, con sus instalaciones para el manejo de listas, archivos, I/O, y recursividad en los scripts, [no en la cita dada] y puede ser usado para enseñar la mayoría de los conceptos de informática, como hizo el conferencista de la Universidad de Berkeley, profesor Brian Harvey, en su trilogía de Estilo de Logotipo de la Ciencia de la Computación. Para la enseñanza del nivel terciario, sin embargo, el logotipo ha sido reemplazado por el Esquema, y lenguajes de script.

## GUI

UCBLogo tiene sólo una interfaz gráfica de usuario rudimentaria, por lo que existen varios proyectos que proporcionan una mejor interfaz. MSWLogo y su sucesor FMSLogo, para Windows de Microsoft, se utilizan comúnmente en las escuelas de Reino Unido y Australia.

## Diseño

Logo fue diseñado en el espíritu de bajo umbral y sin techo, lo cual permite una fácil entrada para novatos sin embargo, satisface las necesidades de los usuarios de alta potencia. Las animaciones requieren tanto la habilidad para dibujar formas como para borrar formas. El proceso es el mismo, excepto que en el antiguo, una línea se deposita en el dispositivo de exhibición y en el último se elimina una línea. Utilizando la analogía de tortuga, el bolígrafo de la tortuga debe pintar y debe borrar. La tortuga puede ser configurada para borrar cualquier cosa abajo de ella, utilizando el comando PENERASE (PE), mientras que el bolígrafo puede ser configurado para volver a dibujar con el comando PENPAINT (PPT), en UCBLogo.

### El bolígrafo

La analogía de una tortuga con un bolígrafo sujeto a su cola se utiliza a menudo. El bolígrafo de la tortuga puede ser levantado y bajado, dibujando así una línea de puntos rudimentaria.
Un código de ejemplo:

### Datos

Hay tres tipos de datos en UCBLogo:
* La palabra
* La lista
* La matriz
Un número es un caso especial de palabra.
No hay tipos estáticos. El intérprete detecta el tipo de datos por el contexto.
Hay dos símbolos importantes:
* Los dos puntos (:) significa los contenidos de. Este es un símbolo de gran utilidad que mantiene recordando a los estudiantes que una variable es realmente algún 'sitio' en memoria.
* La comillas dobles (") significa la palabra se evalúa como sí misma, o su valor después de la evaluación es el mismo que era antes. Esto es importante. Para usuarios de otros lenguajes de programación: las comillas dobles no están emparejadas como apertura y cierre de citas.
Un número es un caso especial de autoevaluación—en lo que realmente pueda ser escrito con una cita. 2 es realmente "2
Asignación de variables (p. ej. x := y + 3) se maneja en Logo con el comando make, como se ejemplifica en estas dos declaraciones equivalentes:
make toma 2 parámetros, el segundo del cual aquí es sum :y 3. sum toma dos 'parámetros' y es una 'operación', por ello el cálculo es posible. "3 evalúa a 3, y :y toma los contenidos de la que se llama y, estos se suman dando un número.
El efecto de make es colocar el resultado en el primer parámetro. Desde una perspectiva programática, el primer argumento a make se pasa por referencia, mientras que el segundo se pasa por valor.

#### Alcances

Las variables no tienen que ser declaradas antes de su uso; su alcance es entonces mundial.
Una variable puede ser declarada local, entonces su alcance se limita a dicho procedimiento y cualesquier procedimientos que llama (también llamado Alcance dinámico). Llamar a un procedimiento con las entradas (el nombre normalmente utilizado para argumentos en la literatura Logo) también crea variables locales que mantienen los valores de los argumentos.

#### Listas

Logo hereda las listas de Lisp, y son su principal método de almacenamiento de vectores. También se proporcionan matrices.
* Existen operadores para convertir palabras a listas, y listas a matrices y viceversa.
* Este tipo de dato tiene la ventaja sobre las matrices que es infinitamente expandible. Los datos se extraen mediante las operaciones first, butfirst, last, butlast, butmember, member e item. Los elementos de datos se añaden utilizando fput y lput.
* Una lista puede ser considerada como una cola con los operadores queue y dequeue, o una pila con los operaciones push y pop.
* La recursividad más que iteración es el método natural para procesar listas.

#### Órdenes de estructura del control

Logo proporciona varias estructuras de control comunes. Hay una estructura condicional.
* ifelse test [hacer_si_lista cierta ] [hacer_si_lista falsa]
Hay tres órdenes de iteración:
* Mientras condición [lista de instrucción]
* Hasta que condición [lista de instrucción ]
* Repetir número [lista de instrucción]
La recursividad es el paradigma de procesamiento preferido de Logo.

#### Iteración de plantilla

Logo también proporciona estructuras de control basadas en listas. La idea básica es de dos listas:
Cada uno de los comandos se aplica a su vez a cada uno de los elementos de datos. Hay varios de estos comandos de plantilla con nombres como MAP, APPLY, FILTER, FOREACH, REDUCE y CASCADE. Representan cuatro sabores de iteración de plantilla, conocida como explicit-slot, named-procedure, named-slot (o Lambda), y procedure-text.

#### Listas de propiedades

Una lista de propiedad es una lista especial donde los elementos de número impar son nombres de propiedades, e incluso, son los valores de propiedad. Hay tres comandos para procesar lista de propiedades.

### I/O

El texto puede ser escrito en la ventana de comandos (flujo de salida) usando print y en la ventana de gráficos se usa label
Las comandos estándar son readlist readword readchar siendo el teclado el flujo de entrada normal. En la tradición Unix el flujo de entrada se puede cambiar, así que la entrada puede provenir de un archivo de disco. Del mismo modo, la salida puede ser redirigida.

## Sintaxis

Los comandos pueden escribirse en una sola línea, o más. Muchos comandos tienen formas cortas mnemotécnicas; por ejemplo FORWARD y RIGHT son codificados FD y RT respectivamente. Esto hace la entrada menos onerosa. Cualquier cosa escrita después de; (punto y coma) se ignora, lo que permite el código para insertar comentarios.
El programa Hola mundo en Logo se ve así:

### Bucles

Hay tres comandos de bucle (repetición); REPEAT es uno. Esto dibuja un cuadrado.
El comando FD 100 LEFT 90 se ejecuta cuatro veces. Una aproximación de un círculo se puede construir fácilmente con 360 rotaciones pequeñas y un paso adelante: REPEAT 360 [FD 1 RIGHT 1]. Los bucles pueden anidarse, dando resultados espectaculares con poco esfuerzo.
Otro ejemplo de bucles anidados

### Funciones y procedimientos

Cada línea está hecha de llamadas a funciones, o subrutinas en la terminología de programación, de los cuales hay dos tipos:
* Comandos (Que hacer algo—afecta—pero no regresa un valor) como print.
* Operaciones (Que regresa un valor, su salida) como sum, first o readlist.
Un comando es similar a un procedimiento de Pascal, y una operación es similar a una función de Pascal. (Véase también: la separación de consultas del sistema, donde una consulta es una operación en Logo). Un subconjunto especial de operaciones, llamada predicados, que acaba de emitir la palabra true o false, está convencionalmente escrito con una p al final. Los ejemplos incluyen emptyp, wordp, y listp.
* Las expresiones pueden ser primitivas, o definidas por el usuario.
* Las expresiones pueden tener cero, uno o más parámetros.
Los procedimientos pueden ser definidos en la línea de comandos, utilizando el par TO END:
Sin embargo, en los primeros Logo el procedimiento se limitó a la longitud de la línea física del dispositivo de entrada.
Todos los Logo pueden involucrar un Editor, por lo general por EDALL. En el editor, los procedimientos pueden ser grabados sobre muchas líneas, como nada es interpretado hasta que la edición se ha completado.
La nueva palabra se guarda en el vocabulario disponible, pero la definición se pierde una vez la sesión de Logo ha terminado. Internamente los procedimientos son palabras y en este caso, cada vez que SILLA se introduce, la secuencia REPEAT 4 [FD 100 LEFT 90] FD 200 se ejecutará. La palabra SILLA puede ser usada como un comando; por ejemplo, REPEAT 4 [SILLA] repetiría la operación SILLA cuatro veces.
Un retraso de WAIT entre el dibujo y el borrando puede introducir la ilusión de movimiento:

### Argumentos/Parámetros

Logo puede pasar información adicional a sus palabras, e información de retorno. El procedimiento, (palabra) es instruido para esperar algo y darle un nombre. Los dos puntos se utiliza para este propósito. Se pasa la información por el valor y los dos puntos se pronuncia como el valor de. Cuándo el procedimiento se ejecuta con un comando como SILLA 200, la palabra :thesize toma el valor 200 así que cuando FD :thesize se ejecuta, el intérprete entiende FD, el valor de 200.

### Otras notas

Matemática en Logo usa la notación de prefijo, como: sum :x :y, product :x :y, difference :x :y, quotient :x :y Infix también está disponible.
Logo permite la recursividad, el proceso donde un procedimiento se llama a sí mismo.