I'm trying to take user input and storing it in a list, only instead of a list consisting of a single string, I want each word scanned in to be its own string. Example:
> (input)
This is my input. Hopefully this works
would return:
("this" "is" "my" "input" "hopefully" "this" "works")
Taking note that I don't want any spaces or punctuation in my final list.
Any input would be greatly appreciated.
split-sequence
is the off-the-shelf solution.you can also roll your own:
where
delimiterp
checks whether you want to split on this character, e.g.or
PS. looking at your expected return value, you seem to want to call
string-downcase
beforemy-split
.PPS. you can easily modify
my-split
to accept:start
,:end
,:delimiterp
&c.PPPS. Sorry about bugs in the first two versions of
my-split
. Please consider that an indicator that one should not roll one's own version of this function, but use the off-the-shelf solution.There's
cl-ppcre:split
:http://weitz.de/cl-ppcre/#split
For common cases there is the (new, "modern and consistent") cl-str string manipulation library:
You have cl-slug to remove non-ascii characters and also punctuation:
For that task in Common-Lisp I found useful
(uiop:split-string str :separator " ")
and the packageuiop
, in general, has a lot of utilities, take a look at the docs https://common-lisp.net/project/asdf/uiop.html#index-split_002dstring.