Search code examples
lispcommon-lispsbcl

How can I avoid package/character errors in (read) in Common Lisp?


I'm getting some surprising errors when I try to input a string using (read). Context: I'm building a mini language, with inputs deliminated using characters like {, }, :, etc.

Here's what happens, I run (read) and enter {9.I:{8.II:hello}{8.III:hi}} (an example input string from my mini language).

I then get 2 errors:

1:

too many colons in "{8.II"

2:

Package HELLO}{8.III does not exist.

It seems as though there's something extra going on in the (read) function that's tripping me up. Can someone point me in the right direction?


Solution

  • read is designed to read a valid Lisp S-expression. It's going to use Common Lisp's parser. If your language is sufficiently Lisp-like, you may be able to make it work for you, but given the example input you've shown, I doubt it's what you want.

    You're probably looking for read-line, which reads a single line of text as a string and does not perform any additional parsing on it.