Ahora ya sabemos como mandarle un número a un procedimiento, y probablemente ya habrás intentado poner operaciones como suma, resta o multiplicación, sin embargo lamanto decirte que ninguna de estas operaciones están soportadas en Karel.
Por otro lado, existen dos funciones que nos permiten sumarle 1 a un número y restarle 1.
Pero... ¿qué es una función? Una función es una instrucción que devuelve un valor, es decir, reciben un parámetro (o más) que luego procesa, para al final regresar un valor; por ejemplo, la función booleana junto-a-zumbador devuelve verdadero si Karel está parado junto a un zumbador y falso si no lo está. En Karel no se pueden declarar funciones nuevas, pero se pueden usar las que ya existen.
Las funciones succ y pred son dos instrucciones que reciben un parámetro, posteriormente, devuelven un número más y un número menos (respectivamente) que el que le enviamos.
La función succ se escribe así:
...
succ(xxx);
...
donde xxx es un número o un parámetro, y la función pred se escribe así:
...
pred(xxx);
...
donde xxx es un número o un parámetro.
Debido a que devuelven un número, solo nos pueden servir poniendolas en alguna instrucción o sentencia que reciba un número, como iterate, otro succ o pred o una instrucción personal que reciba un parámetro.
Por ejemplo, el siguiente trozo de código pone n + 1 zumbadores en donde Karel se encuentra:
...
iterate( succ(n) ) {
putbeeper();
}
...
nota que n se "incrementa" (se le suma uno). Si en vez de succ, pusieramos pred, Karel dejaría n - 1 zumbadores, porque la n se "decrementa" (se le quita uno) cuando se pone dentro de una función pred.
Ejercicio 10: Escribe una nueva instrucción que reciba un número n y mueva a Karel n + 2 veces (validando el choque contra paredes), y posteriormente, coloque n - 2 zumbadores en la posición en donde está. PISTA: Usa un iterate para mover a Karel y otro para colocar los zumbadores. NO se vale colocar instrucciones fuera de los ciclos iterate.