2016-12-19 3 views
0

Ich versuche, den Mindestwert von Integer in Lisp abzurufen. Ich fandMinimalwert von Integer Lisp

most-negative-fixnum 

Variable, die die niedrigstmögliche Zahl darstellen sollte. was auch immer ich versuche, ist es wirft Fehler

Variable `MOST-NEGATIVE-FIXNUM 'ist ungebunden.

Gibt es einen bestimmten Weg, wie man den Wert von Variablen in Lisp bekommt? Meine Forschung darüber ist ohne Ergebnisse.

Dank

+3

Einfach versucht, ['most-negative-fixnum'] (http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/convar_most-p_ative-fixnum.html) in SBCL's einzugeben REPL, und es hat wie erwartet funktioniert. Welche Lisp-Implementierung verwenden Sie? –

+0

Ich benutze geläufiges Lisp, wenn das ist, was Sie fragen – Darlyn

+4

@trolkura: Common Lisp ist eine Sprache. Aber welche Implementierung. Sie möchten genau zeigen, was Sie tun. Bearbeiten Sie Ihre Frage, um zu zeigen, welche Eingabe zu welchem ​​Ergebnis führt. –

Antwort

5

Es soll wie folgt arbeiten, beispielsweise mit SBCL als Implementierung von Common Lisp:

CL-USER> (lisp-implementation-type) 
"SBCL" 
CL-USER> (lisp-implementation-version) 
"1.3.12.51-868cff4" 
CL-USER> most-negative-fixnum 
-4611686018427387904 

[...] Variable, die die geringstmögliche Anzahl

darstellen sollten

Das wäre die niedrigstmögliche fixnum. Sie haben große Zahlen zu:

CL-USER> (* 10000 most-negative-fixnum) 
-46116860184273879040000 
+1

Nun, was ist interessant, warum ist das -2^62. Was ist mit dem 63. Bit passiert? –

+0

@BartvanNierop 64 Bits minus 1 Bit für Vorzeichen und 1 Bit zum Markieren des Wertes als "sofort". – coredump

+0

Mir war das Zeichenbit bewusst, was bedeutet "sofort"? –

2

Seit Common Lisp haben bignum als Teil seiner Spezifikationen gibt es keine Begrenzung, wie niedrigen numerischen Wert, den Sie aus der Sprache Sicht haben kann.

Da Maschinen über endlichen Speicher verfügen, werden Sie feststellen, dass die Anzahl Ihrer Maschinen begrenzt ist. Es ist für eine Implementierung nicht möglich, diese Nummer zu kennen oder sie Ihnen zu zeigen, ohne sie tatsächlich zu versuchen, oder vielleicht hat die Implementierung einige Ideen von oben. Ohne Overhead können Sie Ihren verfügbaren Speicher in Byte als Schätzung verwenden und Sie haben 8 Bits pro verfügbarem Byte. ZB meine Maschine hat ungefähr 11GB zur Verfügung, also denke ich, dass ich 10GB als den tatsächlichen Speicher und das Zeichen verwenden kann, dh. 80 GBit für die tatsächliche Anzahl. -2^80G + 1 oder ~ -10^2900000000. Sie können es nicht drucken, da Sie keinen freien Speicher haben.