2012-06-07 6 views
9

DrRacket en ejecución R5RS dice que 1### es un número de esquema perfectamente válido e imprime un valor de 1000.0. Esto me lleva a creer que los signos de la libra (#) especifican inexactitud en un número, pero no estoy seguro. La especificación también dice que es una sintaxis válida para un número literal, pero no dice lo que significan esos signos.Significado de # en Número de literales del esquema

¿Alguna idea sobre lo que los signos # en Número de literales del número signifiy?

Respuesta

12

La sintaxis de hash se introdujo en 1989. Hubo una discusión sobre números inexactos en la lista de correo de los autores del Esquema, que contiene varias ideas agradables. Algunos se contagiaron y otros no.

http://groups.csail.mit.edu/mac/ftpdir/scheme-mail/HTML/rrrs-1989/msg00178.html

Una idea que se pegó fue la introducción de la # reposar durante un dígito desconocido. Si tiene una medición con dos dígitos significativos, puede indicar que con 23## se conocen los dígitos 2 y 3, pero que los últimos dígitos son desconocidos. Si escribe 2300, entonces no puede ver que los dos cero no son confiables. Cuando vi la sintaxis esperaba 23## para evaluar a 2350, pero (creo) la interpretación depende de la implementación. Muchos aplicación interpretan como 23## 2300.

se introdujo formalmente la sintaxis aquí:

http://groups.csail.mit.edu/mac/ftpdir/scheme-mail/HTML/rrrs-1989/msg00324.html

EDITAR

De http://groups.csail.mit.edu/mac/ftpdir/scheme-reports/r3rs-html/r3rs_8.html#SEC52

un intento de producir más dígitos de los que están disponibles en la representación interna de la máquina de un número se marcará con wi th a "#" llenando los dígitos adicionales. Esto no es una declaración de que la aplicación sabe o no pierde de vista el significado de un número, al igual que la máquina será intentos bandera para producir 20 dígitos de un número que tiene sólo 15 dígitos de la representación de la máquina:

3 .14158265358979 #####; (FLO 20 (exactitud s)) escribe

Edit2

Gerald Jay Sussman por qué el introdujo la sintaxis aquí:

http://groups.csail.mit.edu/mac/ftpdir/scheme-mail/HTML/rrrs-1994/msg00096.html

+0

+1, mucho más útil que la mía, pero yo Lo dejo por los enlaces. ¿Está esto especificado en otro lugar en RnRS? –

+1

Es difícil encontrar mucho. Un tidbit es del manual de R3RS en la sección de formato. Si se solicita a una implementación que escriba un número con 20 dígitos, pero solo se conocen 15 dígitos en la representación interna, entonces puede escribir # en lugar de los dígitos desconocidos. Como 'write' puede producir estos números, el procedimiento' read' también debe manejarlos. – soegaard

7

Aquí está la documentación R4RS y R5RS respecto constantes numéricas:

A saber:

Si la representación escrita de un número no tiene prefijo exactitud, la constante puede ser inexacta o exacta. Es inexacto si contiene un punto decimal, un exponente o un carácter "#" en el lugar de un dígito; de lo contrario, es exacto.

No estoy seguro de que signifiquen nada más que eso, que no sea 0.