In C, _ comes in handy when naming variables and functions, as a replacement for space. For example:

int the_name_of_my_variable;

I find this more readable than CamelCase:

int theNameOfMyVariable;

That's just my taste.

In Mathematica we cannot use _ to replace spaces in variable names, because _ means Blank pattern. Is there an alternative we can use? Another character that is not an operator and can be used as a replacement for space?

  • $\begingroup$ Check out Non-printing Characters and \[LetterSpace]. $\endgroup$ – dionys Mar 29 '16 at 12:57
  • $\begingroup$ You may use any Letter and Letter Like Form as long as it is not a defined symbol. Smiley face, ellipse, white bishop, black king, wolfie; anything. However, I think it will make your code hard to read for others. $\endgroup$ – Edmund Mar 29 '16 at 12:59
  • $\begingroup$ @dionys \[LetterSpace] is close to what I want. But I want something I can see. Is there a form of underscore that is not a symbol? $\endgroup$ – becko Mar 29 '16 at 13:09
  • 1
    $\begingroup$ You can use $the$name$of$my$variable $\endgroup$ – rm -rf Mar 29 '16 at 14:07
  • 1
    $\begingroup$ In the past Wolfram Research had the same problem when they implemented NETLink. Their solution was to replace _ by U (see here, and look for "underscore"). It's a clue that there is probably no better way to do that. $\endgroup$ – andre314 Mar 29 '16 at 16:48

This has been discussed on comp.soft-sys.math.mathematica. The gist is that there are lots of Unicode characters you could use, e.g. \[LetterSpace] or \[UnderBracket] (you could consult https://reference.wolfram.com/language/tutorial/LettersAndLetterLikeForms.html for a long list), but I'd strongly urge you not to do that.

Once you copy the code out of Mathematica, these will be expanded to the above long forms which will make your code very unreadable. I think there are ways to "copy as Unicode", but a lot of these are in Unicode's private use pages, which means they will almost certainly not render properly anywhere outside of Mathematica.

Plus, camelCase is such a widespread convention in Mathematica, that it's probably not worth the trouble working around that just to match your programming style in another language. Mathematica's syntax works differently from C's, and I don't think there's a lot of benefit in trying to make Mathematica look like C. You'll probably save yourself a lot of trouble by simply embracing Mathematica's own conventions.

| improve this answer | |
  • 2
    $\begingroup$ "it's probably not worth the trouble working around that just to match your programming style in another language." - I upvoted specifically because of this. When in Rome... $\endgroup$ – J. M.'s technical difficulties Mar 29 '16 at 13:22

The issue is that Mathematica interprets underscore as Blank and interprets my_variable as a Pattern, when what we'd like is a legitimate symbol name.

    (* Pattern *)

There are a few Unicode alternatives for underscore:

| improve this answer | |
  • 1
    $\begingroup$ ...and to verify that they are indeed valid symbols, use SyntaxQ[]. $\endgroup$ – J. M.'s technical difficulties Mar 29 '16 at 13:58
  • $\begingroup$ @J.M.issomewhatokay. that won't verify that these symbols are valid symbols for variables. E.g. SyntaxQ["1hel_lo5"] also returns True. $\endgroup$ – Ruslan Sep 29 '18 at 19:02
  • $\begingroup$ @Ruslan, indeed, so one needs to do another test like StringMatchQ["1hel_lo5", WordCharacter ..]. $\endgroup$ – J. M.'s technical difficulties Sep 29 '18 at 19:09
  • $\begingroup$ @J.M.issomewhatokay. I think Symbol["1hel_lo5"] would be a more direct check (if it returns unevaluated and emits Symbol::symname, the symbol is bad, otherwise OK). $\endgroup$ – Ruslan Sep 29 '18 at 19:16
  • $\begingroup$ @Ruslan, you'd need to wrap Quiet[] around it if you don't want messages being thrown just for testing, however. $\endgroup$ – J. M.'s technical difficulties Sep 29 '18 at 19:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.