Como explicábamos en un capítulo anterior, la funciónFIX convierte los números reales a enteros a base de un simpletruncamiento de la parte no entera. Este procedimiento no es satisfactorio enmuchos casos donde se requiere un grado mayor de precisión. Asíobtendremos el mismo resultado para (fix 6.1) que para (fix 6.9), en amboscasos simplemente 6. Una conversión más precisa se obtiene utilizando para laconversión la función RTOS que además de convertir elnúmero real a cadena de caracteres, es capaz, cuando se especifica cero comonúmero de decimales, de realizar unna aproximación al enteromás cercano. Así (rtos 6.1 2 0) devuelve 6 mientras que (rtos 6.92 0) devuelve 7. Podemos definir una función ROUND de redondeo como sigue:
Hasta ahí bien, pero para 6.5 esta función realizaríala aproximación al entero mayor, que en este caso sería 7. Con loque no se cumpliría la definición propuesta para la norma deCommon LISP, donde se especifica que:
Para cumplir esta especificación deberemos desarrollar unafunción más compleja, que llamaremos CL-ROUND, siguiendo la normacitada. Esta función requerirá un predicado tambén norma deCommon LISP, pero ausente aún de AutoLISP-Visual LISP. El predicadoEVENP que comprueba si un número entero es par.
La nueva función cl-round recibe el número del cual comprueba:
En caso de que ambas condiciones sean ciertas:
|
AutoCAD: Visual LISP > Apuntes para un Curso... > Programación de Aplicaciones Gráficas > 2. Técnicas Fundamentales > 2.2. Funciones > 2.2.4. Funciones Definidas por el Usuario > 2.2.4.1. La Primitiva DEFUN >