2013-04-25 4 views
15

Ich habe versucht, eine Lisp-Funktion zu finden, um zwischen Zahlen und Strings zu konvertieren und nach ein wenig googeln ich eine Funktion mit dem gleichen Namen. wenn ich (itoa 1) SLIME gedruckt eingegeben:Konvertieren von Nummer in String in Lisp

Undefined function ITOA called with arguments (1) . 

Wie kann ich tun, um die Umwandlung?

Antwort

30

Von Nummer string:

(write-to-string 5) 
"5" 

Sie eine Zeichenfolge zu einem verwandeln kann numerische Notation:

(write-to-string 341 :base 10) 
"341" 

Von String-Nummer:

(parse-integer "5") 
5 

mit einigen Müll

(parse-integer " 5 something not a number" :junk-allowed t) 
5 

Oder verwenden Sie diese:

(read-from-string "23 absd") 
23 
+2

Verwenden Sie 'read-from-string' nicht für extern bereitgestellte Strings, oder binden Sie' 'read-eval *' zumindest an false, wenn Sie dies tun. Bei der allgemeinen Analyse von Zahlen ist auch die Bibliothek 'parse-number' von Bedeutung. – Svante

12

Ein schweres Lösung ist FORMAT zu verwenden:

[2]> (format nil "~A" 1) 
"1" 

Es gibt auch WRITE-TO-STRING:

[3]> (write-to-string 10) 
"10" 
+1

Vielen Dank für die Verknüpfung mit der CLHS. Das hilft, diese Antwort nützlicher zu machen, als sie es sonst wäre. – lindes

0

FYI: Ich glaube, (itoa #) ist nur eine Funktion in AutoLISP - die LISP-Variante eingebettet in AutoCAD-Zeichnungssoftware. AutoLISP hat viel weniger Funktionen als Common Lisp und manchmal identische Funktionen mit einem anderen Namen oder Funktionen mit dem gleichen Namen, die anders funktionieren.

Das ist wahrscheinlich, warum es für Sie nicht funktioniert hat. Ich benutze AutoLISP regelmäßig und (itoa #) würde genau das tun, was Sie dort wollen.