My solution only works if it is acceptable to change the input slightly to avoid parsing square brackets. Also I avoided symbol->string by making the items strings. Here is the function running under DrRacket:

Again, I've assumed it is acceptable to change the input data to a native
representation.

Big conclusion

So that's 4 lines of Logo, 12 lines of Scheme and 9 lines of C++. Depending on how you count the lines. (I don't count blank lines, comment-only lines or lines containing only an opening or closing curly brace.) Therefore, Logo is better than C++ and C++ is better than Scheme. ("You're joking, right?")