2012-06-07 4 views
9

DrRacket läuft R5RS sagt, dass 1### ist eine vollkommen gültige Schema Nummer und druckt einen Wert von 1000.0. Das führt mich zu der Annahme, dass die Nummernzeichen (#) Ungenauigkeit in einer Zahl angeben, aber ich bin mir nicht sicher. Die Spezifikation sagt auch, dass es gültige Syntax für ein Zahlenliteral ist, aber es sagt nicht, was diese Zeichen bedeuten.Bedeutung von # in Schema Nummer Literale

Irgendwelche Ideen, was die # Zeichen in Scheme Zahl Literale bedeuten?

Antwort

12

Die Hash-Syntax wurde 1989 eingeführt. Es gab eine Diskussion über ungenaue Zahlen auf der Mailingliste der Scheme-Autoren, die einige nette Ideen enthält. Einige haben es verstanden und manche nicht.

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

Eine Idee, die die # festsaß Einführung für eine unbekannte Stelle zu stehen. Wenn Sie eine Messung mit zwei signifikanten Ziffern haben, können Sie mit 23## angeben, dass die Ziffern 2 und 3 bekannt sind, die letzten Ziffern jedoch unbekannt sind. Wenn du 2300 schreibst, dann kannst du nicht sehen, dass die beiden Zero nicht zutraulich sind. Als ich die Syntax sah erwarte ich 23## um 2350 zu bewerten, aber (ich glaube) die Interpretation ist implementierungsabhängig. Viele Umsetzung interpret 23## als 2300.

Die Syntax wurde offiziell hier vorgestellt:

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

EDIT

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

Ein Versuch, mehr Stellen zu produzieren, als verfügbar sind in Die interne Maschinendarstellung einer Nummer wird mit wi markiert th ein "#" füllt die zusätzlichen Ziffern. Dies ist keine Aussage, dass die Umsetzung kennt oder verfolgt die Bedeutung einer Zahl, nur, dass die Maschine versucht Flag 20 Ziffern einer Zahl zu erzeugen, die nur 15 Stellen der Maschinendarstellung hat:

3 .14158265358979 #####; (Flo 20 (Exaktheit s))

EDIT2

Gerald Jay Sussman schreibt, warum die die Syntax hier vorgestellt:

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

+0

+1, viel nützlicher als meine, aber ich laß es für die Links. Wird dies irgendwo anders in RnRS angegeben? –

+1

Es ist schwierig, viel zu finden. Ein Leckerbissen ist aus dem R3RS-Handbuch im Formatbereich. Wenn eine Implementierung aufgefordert wird, eine Zahl mit 20 Ziffern zu schreiben, aber nur 15 Ziffern in der internen Darstellung bekannt sind, kann sie # anstelle der unbekannten Ziffern schreiben. Da 'write' diese Zahlen erzeugen kann, muss die Prozedur' read' auch mit diesen umgehen. – soegaard

7

Hier ist die R4RS und R5RS docs in Bezug auf numerische Konstanten:

Nämlich:

Wenn die schriftliche Darstellung einer Zahl keinen Exaktheit Präfix hat, kann die Konstante entweder ungenau oder genau sein. Es ist ungenau, wenn es einen Dezimalpunkt, einen Exponenten oder ein "#" - Zeichen an der Stelle einer Ziffer enthält, sonst ist es genau.

Nicht sicher, dass sie etwas anderes als das bedeuten, außer 0.