'Convert a string to list

Calling all racket developers, I am a newbie in the language of racket. I want to convert a string to a list.

I have a string like this:

"(1 2 3 4 5)"

I want to converted to:

'(1 2 3 4 5)

I tried using string-> list but this is the result:

(#\(
  #\1
  #\space
  #\2
  #\space
  #\3
  #\space
  #\4
  #\space
  #\5
  #\))


Solution 1:[1]

Here's one possible way, using Racket's read.

#lang racket

(define (convert str)
  (with-input-from-string str
    read))

(convert "(1 2 3 4 5)") ;=> '(1 2 3 4 5)

Normally, (read) will read an input from standard input. However, I use with-input-from-string to redirect the read operation on a string instead.

Solution 2:[2]

Here we split the string while ignoring the non-digits, then convert the digits to numbers:

#lang racket

(define (convert str)
  (map string->number (string-split str #px"[ )()]")))

(convert "(1 2 3 4 5)")

; => '(1 2 3 4 5)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Sorawee Porncharoenwase
Solution 2 frayser