Web: https://mpru.github.io/karel/
CRAN: https://CRAN.R-project.org/package=karel
karel
un nuevo paquete de R creado con el propósito de brindar un
entorno que posibilite la enseñanza de principios de la programación en
una forma dinámica e interactiva, para estudiantes sin experiencia
previa que estén cursando el nivel secundario o los primeros años de su
formación de grado. Karel es una robot que vive y camina por ciertos
mundos, en los cuales puede realizar determinadas acciones si se lo
pedimos, mientras aprendemos a programar en R.
La robot Karel acompaña en la enseñanza de conceptos fundamentales de la
programación, por ejemplo, el de procesador (Karel), ambiente (su
mundo), objetos (llamados cosos) y acciones (las actividades que puede
realizar). Además, como se puede observar en los ejemplos de los
tutoriales presentes en esta página, junto con Karel es posible instruir
sobre el concepto de la descomposición algorítmica: en numerosas
oportunidades la robot debe cumplir objetivos cuya resolución requiere
descomponer el problema en partes más pequeñas, para cada una de las
cuales los estudiantes deben programar una función en R. También
facilita la ejemplificación del uso de estructuras de control de código
secuenciales, condicionales (if () {} else {}
) e iterativas
(for () {}
, while () {}
).
El primer paso para programar con Karel es generar un mundo en el cual
ella pueda andar, a través de la instrucción generar_mundo()
,
aclarando entre los paréntesis el nombre del mundo que queremos usar. El
paquete trae incorporados unos cuantos pero los usuarios pueden optar
por crear otros nuevos.
Todos los mundos de Karel son rectangulares, compuestos por calles que
los recorren horizontalmente (filas) y avenidas verticales (columnas).
Karel siempre se encuentra en la intersección entre una calle y una
avenida (celda), mirando hacia una de las cuatro direcciones posibles:
este, norte, oeste o sur. Los bordes negros representan paredes que
Karel no puede atravesar, solo puede rodearlas. Además, en algunas
celdas hay uno o varios cosos. Karel puede recorrer el mundo poniendo
y juntando cosos por ahí; si los junta los guarda en su mochila y
lleva un registro de cuántos tiene. Finalmente, Karel solo puede
realizar estas actividades: avanzar()
, girar_izquierda()
,
juntar_coso()
y poner_coso()
. Claro, agrupando ingeniosamente estas
acciones básicas se pueden crear otras nuevas, por ejemplo, crear una
función girar_derecha()
que produzca tal efecto, haciendo girar a
Karel tres veces a la izquierda. Por otro lado, Karel es capaz de
evaluar ciertas características de su entorno a través de funciones que
arrojan un valor lógico TRUE
o FALSE
, por ejemplo:
frente_abierto()
, hay_cosos()
o mira_al_sur()
, de manera que
podemos condicionar las acciones que Karel realiza a la verificación de
ciertos aspectos sobre su posición y su mundo. Una vez que se ejecuta el
código con todas las acciones que Karel debe realizar, se debe correr la
función ejecutar_acciones()
y se puede ver el resultado en una
animación creada con los paquetes ggplot
y gganimate
.
Con el objetivo de sortear algunas de las barreras idiomáticas que
pueden hacer más desafiante poder dar los primeros pasos en el
aprendizaje de programación, el paquete karel
se diseñó de forma
completamente bilingüe: todas las funciones tienen una versión en
español y en inglés (por ejemplo,girar_izquierda()
y turn_left()
),
así como también las páginas del manual de ayuda y algunas del sitio web
están escritos en ambos idiomas.
La idea para la implementación de este paquete se basa en Karel the Robot, un lenguaje de programación creado con fines educativos por el Dr. R. E. Pattis de la Universidad de Stanford (California, EEUU), quien también escribió el libro Karel the Robot: A Gentle Introduction to the Art of Programming, en 1981. Su nombre es un homenaje a Karel Capek, el escritor sueco que inventó la palabra robot en su obra de ciencia ficción R.U.R. (Rossum’s Universal Robots). Su sintaxis se basaba en Pascal, pero a lo largo de las décadas esta estrategia de enseñanza fue implementada en distintos lenguajes como Java, C++, Ruby y Python. El paquete aquí presentado es la primera implementación de Karel para R. Algunos de los ejemplos incluidos en las viñetas son adaptaciones de aquellos publicados por Eric Roberts en su material Karel the robot learns Java (2005).
This is the R implementation of Karel the robot, a programming language created by Dr. R. E. Pattis at Stanford University in 1981. Karel is an useful tool to teach introductory concepts about general programming, such as algorithmic decomposition, conditional statements, loops, etc., in an interactive and fun way, by writing programs to make Karel the robot achieve certaing tasks in the world she lives in. Originally based on Pascal, Karel was implemented in many languages through these decades, including Java C++, Ruby and Python. This is the first package implementing Karel in R.
Podés instalar karel
desde
CRAN / You can install
karel
from CRAN:
install.packages("karel")
También podés instalar la versión en desarrollo desde GitHub / You can also install the development version from GitHub:
# install.packages("devtools")
devtools::install_github("mpru/karel")
¿Podés escribir un programa para que Karel coloque cosos en los vértices del rombo en en el cual está encerrada?
¿Algo así, tal vez?
# Cargar el paquete y los superpoderes de Karel
library(karel)
cargar_super_karel()
# Crear funciones auxiliares
recorrer_diagonal <- function() {
while (frente_abierto()) {
avanzar()
girar_izquierda()
avanzar()
girar_derecha()
}
}
# Implementar el problema
generar_mundo("mundo019")
for (i in 1:4) {
recorrer_diagonal()
poner_coso()
girar_derecha()
}
ejecutar_acciones()
Ahora Karel está en un laberinto. ¿Podemos hacerla llegar hasta el final?
Sí, con este código:
generar_mundo("mundo009")
while (no_hay_cosos()) {
girar_derecha()
while (frente_cerrado()) {
girar_izquierda()
}
avanzar()
}
ejecutar_acciones()
Podés ver más detalles sobre estos ejemplos y otros en la sección de tutoriales.
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.