2013-04-25 16 views
15

Próbowałem znaleźć funkcję selekcji, aby konwertować pomiędzy liczbami i ciągami znaków, a po niewielkim przeszukaniu go lubię funkcję o tej samej nazwie. po wprowadzeniu (itoa 1) SLIME wydrukowano:Konwertowanie numeru na ciąg w lisp

Undefined function ITOA called with arguments (1) . 

Jak mogę wykonać konwersję?

Odpowiedz

30

Od liczby do łańcucha:

(write-to-string 5) 
"5" 

można przekształcić ciąg dowolnego notacja numeryczna:

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

Od ciąg na numer:

(parse-integer "5") 
5 

z jakiegoś śmietnika

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

ani używać tego:

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

Nie używaj 'read-from-string' na zewnętrznie dostarczonych ciągach lub przynajmniej przypisz' * read-eval * 'do false, kiedy to zrobisz. Warto również zwrócić uwagę na ogólne przetwarzanie liczbowe w bibliotece 'parse-number'. – Svante

12

wagi ciężkiej rozwiązaniem jest użycie format:

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

Istnieje również WRITE-TO-STRING:

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

Dziękujemy za połączenie z CLHS. To sprawia, że ​​ta odpowiedź jest bardziej użyteczna niż w innym przypadku. – lindes

0

FYI: Wierzę (itoa #) jest tylko funkcją w AutoLISP - wariant LISP osadzony w programie kreślącym AutoCAD. AutoLISP ma znacznie mniej funkcji niż Common Lisp, a czasem identyczne funkcje o innej nazwie lub funkcjach o tej samej nazwie, które działają inaczej.

To pewnie dlatego nie zadziałało. Regularnie korzystam z AutoLISP i (itoa #) robiłbym dokładnie to, co chcesz.

Powiązane problemy