Como explicábamos en un capítulo anterior, la función FIX convierte los números reales a enteros a base de un simple truncamiento de la parte no entera. Este procedimiento no es satisfactorio en muchos 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 ambos casos simplemente 6. Una conversión más precisa se obtiene utilizando para la conversión la función RTOS que además de convertir el número real a cadena de caracteres, es capaz, cuando se especifica cero como número de decimales, de realizar unna aproximación al entero más cercano. Así (rtos 6.1 2 0) devuelve 6 mientras que (rtos 6.9 2 0) devuelve 7. Podemos definir una función ROUND de redondeo como sigue:
Hasta ahí bien, pero para 6.5 esta función realizaría la aproximación al entero mayor, que en este caso sería 7. Con lo que no se cumpliría la definición propuesta para la norma de Common LISP, donde se especifica que:
Para cumplir esta especificación deberemos desarrollar una función más compleja, que llamaremos CL-ROUND, siguiendo la norma citada. Esta función requerirá un predicado tambén norma de Common LISP, pero ausente aún de AutoLISP-Visual LISP. El predicado EVENP 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 >