2013-04-25 55 views
15

Ho provato a trovare una funzione lisp per convertire tra numeri e stringhe e dopo un po 'di ricerca su google ho aggiunto una funzione con lo stesso nome. quando ho inserito (itoa 1) SLIME stampato:conversione del numero in stringa in lisp

Undefined function ITOA called with arguments (1) . 

Come posso effettuare la conversione?

risposta

30

Da numero a stringa:

(write-to-string 5) 
"5" 

si può trasformare una stringa da qualsiasi notazione numerica:

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

da stringa a numero:

(parse-integer "5") 
5 

con qualche cestino

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

Oppure utilizzare questo:

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

Non usare 'read-from-string' su stringhe fornite esternamente, o almeno legare' * read-eval * 'a false quando lo fai. Inoltre, per l'analisi numerica generale è disponibile il 'parse-number' della libreria. – Svante

12

Una soluzione pesante è quella di utilizzare FORMAT:

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

C'è anche WRITE-TO-STRING:

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

Grazie per il collegamento al CLHS. Questo aiuta a rendere questa risposta più utile di quanto sarebbe altrimenti. – lindes

0

FYI: Io credo (itoa #) è solo una funzione in AutoLISP - la variante LISP incorporata nel software di disegno AutoCAD. AutoLISP ha molte meno funzioni del Common Lisp e talvolta funzioni identiche con un nome diverso o funzioni con lo stesso nome che operano in modo diverso.

Questo è probabilmente il motivo per cui non ha funzionato per te. Io uso AutoLISP regolarmente e (itoa #) farebbe esattamente quello che vuoi lì.