Conociendo a Karel

Si ya instalaste el paquete karel, estamos en condiciones de empezar a usarlo. Vamos a ejecutar la instrucción library(karel) para poder usarlo:

library(karel)

Antes que nada tenemos que generar un mundo para que Karel pueda andar por ahí. Esto lo hacemos con la instrucción generar_mundo(), aclarando entre los paréntesis y con comillas el nombre del mundo que queremos usar. El paquete trae incorporados unos cuantos que iremos explorando, por ejemplo:

generar_mundo("mundo001")

Como se puede ver en la imagen, en el mundo de Karel hay algunos elementos:

Además, Karel puede realizar estas actividades:

Las acciones escritas tal como están arriba son expresiones que podemos entender nosotros, pero para que puedan ser entendidas por Karel, tendremos que respetar las instrucciones con las cuales están implementadas en R:

Los paréntesis indican que las instrucciones anteriores son funciones de R, es decir, que las acciones que Karel sabe realizar se ejecutan en R mediante el uso de funciones. Si bien más adelante estudiaremos funciones con mayor profundidad, por ahora podemos decir que una función es una sección de un programa que cumple con una tarea específica y que tiene un nombre determinado.

Algunas funciones vienen incorporadas en el lenguaje de programación, por ejemplo, cuando calculamos un logaritmo en la consola de R durante nuestros primeros pasos: log(27). log es el nombre de una función que ya viene en R y toma logaritmo del número que está entre paréntesis. Otras funciones se agregan cuando cargamos un paquete, es el caso de las cuatro funciones que mencionamos recién, vienen en el paquete karel. Otras funciones son creadas o programadas por las personas, como haremos muy pronto.

Algunas observaciones importantes sobre las funciones que ejecutan las acciones de Karel en R:

Por sobre todas las cosas, hay que recordar que estas funciones no andan por sí solas. Siempre tienen que estar precedidas por la ejecución de la función generar_mundo("mundo001"), luego corremos todas las acciones de Karel que queramos, pero para poder ver su efecto, tenemos que terminar corriendo la función ejecutar_acciones().

Veamos un primer ejemplo. Vamos a pedirle a Karel que avance, junte el coso y vuelva a avanzar:

# Este programa hace que Karel avance un espacio, junte un coso y vuelva a avanzar
generar_mundo("mundo001")
avanzar()
juntar_coso()
avanzar()
ejecutar_acciones()

Un problema un poquito más interesante sería que luego de que Karel junte el coso, lo coloque en la Calle 2 y Avenida 5 y finalmente avance a la Calle 2 y Avenida 6:

Los primeros tres comandos que necesitamos en el programa son los mismos de antes, pero luego Karel tiene que girar a su izquierda para poder bordear la pared y avanzar un lugar, quedando de cara al norte:

Ahora necesitamos que Karel gire a la derecha, para que quede mirando al este. Sin embargo, Karel sólo sabe girar a la izquierda, no existe ninguna función girar_derecha(). ¿Puede girar a la derecha usando las acciones disponibles? Claro que sí, ya que se puede lograr el mismo efecto girando tres veces a la izquierda. Luego, sólo resta que avance, coloque el coso y vuelva a avanzar una vez:

generar_mundo("mundo001")
avanzar()
juntar_coso()
avanzar()
girar_izquierda()
avanzar()
girar_izquierda()
girar_izquierda()
girar_izquierda()
avanzar()
avanzar()
poner_coso()
avanzar()
ejecutar_acciones()

Algunos ejemplos presentados en este tutorial fueron adaptados de Karel the robot learns Java (Eric Roberts, 2005).