

Literals in Programming Languages - RohitS5
http://www.gavilan.edu/csis/languages/literals.html

======
jmmcd
This article is only about primitive literals, not compound ones. I think the
list and dict literals in Python are the #1 reason I like it better than C. I
think the regexp literals in Perl were one of the main reasons people liked
Perl better than C.

~~~
mahmud
That line blurs when you have homoiconic syntax, specially one with a
programmable reader. Common Lisp uses the # for dispatch macro character, you
can define your own literals, in whatever environment you want.

[http://www.franz.com/support/documentation/6.2/ansicl/subsec...](http://www.franz.com/support/documentation/6.2/ansicl/subsecti/sharpsig.htm)

~~~
arethuza
Can't you set any dispatch character you like using make-dispatch-macro-
character ?

~~~
mahmud
Oh yes, you can set your own dispatch characters, but the # is the dispatch
character for the CL _standard syntax_.

------
tantalor
> Booleans are ordinal values and usually false is less than true.

I was surprised to find this is true,

<http://plato.stanford.edu/entries/truth-values/#3>

~~~
jonsen
So in fact you believed it was false before true then ;-)

~~~
ibotty
well i believed that they are not ordered. (which they are not in some
languages)

~~~
tantalor
That's what I thought, but it appears truth values are typically defined with
a partial ordering a <= b iff a && b == a, which gives false <= false < true
<= true.

You could choose to ignore that partial ordering at your own peril.

------
swah
Factor has them for many data-structures:
[http://docs.factorcode.org/content/article-syntax-
literals.h...](http://docs.factorcode.org/content/article-syntax-
literals.html), but they are simple to add in a concatenative language

(they might as well have been added by a user library).

------
anders0
To nitpick, -14 isn't a literal in _all_ languages. :)

(In Haskell, it's just sugar for negate 14, while in Standard ML it's spelt
~14. And I assume there are other exceptions too.)

~~~
pdw
Even in C it's not a literal. The consequence is that in a 32-bit
implementation, you can't write INT_MIN as -2147483648 (-2^31), because
2147483648 would overflow a signed int. Instead a workaround such as
-2147483647-1 must be used.

~~~
shaurz
Making the minus part of the literal can lead to parsing ambiguity. For
example, "x-3" would parse as 2 tokens "x" and "-3" (instead of 3 tokens "x",
"-" and "3") which would be a syntax error in C. The only workaround I can
think of is making any expression followed by a negative number parse as a
subtraction.

~~~
reycharles
> Making the minus part of the literal can lead to parsing ambiguity.

Not really. It's done in java. Usually, minus ("-") is parsed as a token and
then unary minus on integer literals are transformed to a negative integer
literal.

So, -2147483648 is read as MINUS INT_LITERAL and thus transformed into
"-2147483648" as an INT_LITERAL, but -(2147483648) should be read as MINUS
L_PAREN INT_LITERAL R_PAREN and should thus _not_ be transformed.

