Стандартная схема
Для чисел:
(number->string 123 10) ; ==> "123"
Для символов:
(symbol->string 'test) ; ==> "test"
Таким образом, вы можете проверить, какой это тип и используйте правильную процедуру для преобразования в строку. Вы можете использовать string-append
, поэтому объедините больше строк.
(string-append (symbol->string '+)
(number->string 4)
(symbol->string '*)
(number->string 5)
(symbol->string '-)
(number->string 3)
(number->string 6))
; ==> "+4*5-36"
Если вы выполните процедуру any->string
, вы можете создать одноуровневый список для строки, подобной этой, с помощью SRFI-1:
(foldr (lambda (e a) (string-append (any->string e) a))
""
'(+ 4 * 5 - 3 6))
; ==> "+4*5-36"
Ракетка
Ракетка имеет format
. Если вы сделаете (format "~a" data)
, то получится строка:
(format "~a" '(+ 4 * 5 - 3 6))
; ==> "(+ 4 * 5 - 3 6)"
Обратите внимание, что первый элемент (list + 4 * 5 - 3 6)
не является символом +
, поскольку переменная +
оценивается процедура, которая добавляет вещи. например. (+ 3 4) ; ==> 7
и + ; ==> #<procedure:+>
(в ракетке; спецификация реализации c)