2.4 Mensajes a entidades numéricas

Anteriormente, hemos hablado de cómo Cuis-Smalltalk reconoce los números racionales. Las cuatro operaciones aritméticas y las funciones matemáticas se implementan con mensajes unarios y binarios que comprenden los números racionales:

(15 / 14) * (21 / 5) ⇒ 9 / 2
(15 / 14) / ( 5 / 21) ⇒ 9 /2 
(3 / 4) squared ⇒ 9 / 16
(25 / 4) sqrt ⇒ 5 / 2

 CuisLogo Escribe el código para calcular la suma de los cuadrados de los inversos de los cuatro primeros números enteros.

Ejercicio 2.2: Suma de los cuadrados

Si la división entera de Cuis-Smalltalk devuelve un número racional, ¿cómo podemos obtener el resultado en decimal? Una opción es escribir el número como un literal de punto flotante, un Float. Este tipo de literal se escribe con la parte entera y la parte fraccionaria separadas por un punto «.»:

15.0 / 4 ⇒ 3.75
15 / 4.0 ⇒ 3.75

Otra opción es convertir un entero en un float con el mensaje #asFloat. Es muy útil cuando el entero está en una variable:

15 asFloat / 4
⇒ 3.75

También puedes pedir una división truncada para obtener un entero utilizando el mensaje #//:

15 // 4
⇒ 3

El resto de la división euclideana se calcula con el mensaje #\\:

15 \\ 4
⇒ 3

Cuis-Smalltalk tiene operaciones aritméticas para comprobar si un número entero es impar, par, primo o divisible por otro. Solo tienes que enviar el mensaje unario o la palabra clave adecuada al número:

25 odd ⇒ true
25 even ⇒ false
25 isPrime ⇒ false
23 isPrime ⇒ true
91 isDivisibleBy: 7 ⇒ true
117 isDivisibleBy: 7 ⇒ false
117 isDivisibleBy: 9 ⇒ true

Ejemplo 2.6: Pruebas con enteros

Con mensajes de palabras clave específicas, puede calcular el mínimo común múltiplo y el máximo común divisor. Un mensaje de palabra clave se compone de uno o más signos de dos puntos «:» para insertar uno o más argumentos:

12 lcm: 15 ⇒ 60
12 gcd: 15 ⇒ 3

En el juego Spacewar!, la estrella central es la fuente de un campo gravitatorio. Según la ley de la gravitación universal de Newton, cualquier objeto con masa –una nave espacial o un torpedo en el juego– está sujeto a la fuerza gravitatoria. La calculamos como un vector para tener en cuenta tanto su dirección como su magnitud. El fragmento de código del juego que se muestra a continuación muestra un cálculo mixto (simplificado) de escalares y vectores realizado con el envío de mensajes (véase la Figura 2.4):

-10 * self mass * owner starMass / (position r raisedTo: 3) * position

Ejemplo 2.7: Calcular el vector de la fuerza de la gravedad