2013-04-25 4 views
15

Я попытался найти функцию lisp для преобразования между числами и строками и после небольшого поиска в Google. Я люблю функцию с тем же именем. когда я вошел (itoa 1) SLIME распечатанный:преобразование числа в строку в lisp

Undefined function ITOA called with arguments (1) . 

Как я могу сделать преобразование?

ответ

30

Из числа в строку:

(write-to-string 5) 
"5" 

вы можете преобразовать строку в любой числовые обозначения:

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

Из строки на номер:

(parse-integer "5") 
5 

с некоторым мусором

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

Или использовать эту:

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

Не используйте 'read-from-string' для строк, предоставленных извне, или, по крайней мере, привяжите' * read-eval * 'к false, когда вы это сделаете. Также примечание для общего парсинга чисел - это библиотека 'parse-number'. – Svante

12

тяжеловес решение использовать формат:

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

Там есть также WRITE-TO-STRING:

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

Благодарим вас за ссылку на CLHS. Это поможет сделать этот ответ более полезным, чем в противном случае. – lindes

0

FYI: Я считаю (itoa #) является только функцией в AutoLISP - вариант LISP, встроенный в программу разработки AutoCAD. AutoLISP имеет гораздо меньше функций, чем Common Lisp, а иногда и идентичные функции с другим именем или функциями с тем же именем, которые работают по-разному.

Возможно, это не помогло вам. Я регулярно пользуюсь AutoLISP, и (itoa #) будет делать именно то, что вы там хотите.

Смежные вопросы