Why is the "<" symbol named the "less-than sign"?

Joao S. O. Bueno gwidion at gmail.com
Wed Sep 16 10:18:11 CDT 2020


As a more concrete example of why human-writable-computer-readable files
must keep using
a reduced subset of similar looking characters can be seen in the
discussion below, that took place
along ~50 e-mail messages in a mailing list to discuss improvements to the
Python language.

https://mail.python.org/archives/list/python-ideas@python.org/thread/ILMNJ46EAL4ENYK7LLDLGIMYQKZAMMWU/#ILMNJ46EAL4ENYK7LLDLGIMYQKZAMMWU

On Wed, 16 Sep 2020 at 12:11, Joao S. O. Bueno <gwidion at gmail.com> wrote:

> Of course they are different things - but when you create characters to
> use in computers with
> a 7 bit restriction, back in the 60-70's, they had to choose to overlap
> things.
>
> Nowadays, in a "pretty text" context, it makes sense that the tools
> automatically transform
> the symbols to the one that is semantically more correct - everyon is
> familiar with
> Microsoft Word and others changing single quotes to curly quotes, with
> open/close context;
>
> But when one talks of a file format that is meant to be possibly typed by
> a human and read by
> a computer, like xml, and others, the extra "translation layer", and the
> physical limitation
> of symbols in a keyboard makes it not worth to use what would be a
> "correct" character
> in every language. Thus, "less-than" doubles as "Left angle bracket" in
> all computer-scripts
> or languages that use it in that way.
> (I am quite sure the above paragraph will sound childish for people on
> this list, and I'd love
> to see a more formal rewrite of the same idea)
>
> But the unicode standard surely have the characters for every use
> (I produced the following output using my own tool, sorry if
> it is not the most readable, but I think it conveys enough
> information to understand the case).
>
>
> Character(code=0x3008, value='〈', name='LEFT ANGLE BRACKET',
> category='Ps', width='W'),
> Character(code=0x300A, value='《', name='LEFT DOUBLE ANGLE BRACKET',
> category='Ps', width='W'),
> Character(code=0x2991, value='⦑', name='LEFT ANGLE BRACKET WITH DOT',
> category='Ps', width='N'),
>  Character(code=0x27E8, value='⟨', name='MATHEMATICAL LEFT ANGLE BRACKET',
> category='Ps', width='Na'),
> Character(code=0x27EA, value='⟪', name='MATHEMATICAL LEFT DOUBLE ANGLE
> BRACKET', category='Ps', width='Na'),
>  Character(code=0x276C, value='❬', name='MEDIUM LEFT-POINTING ANGLE
> BRACKET ORNAMENT', category='Ps', width='N'),
> Character(code=0x2770, value='❰', name='HEAVY LEFT-POINTING ANGLE BRACKET
> ORNAMENT', category='Ps', width='N'),
>  Character(code=0xFE3D, value='︽', name='PRESENTATION FORM FOR VERTICAL
> LEFT DOUBLE ANGLE BRACKET', category='Ps', wid
> th='W'),
>
> And then:
> Character(code=0xFE3F, value='︿', name='PRESENTATION FORM FOR VERTICAL
> LEFT ANGLE BRACKET', category='Ps', width='W')
> Character(code=0x003C, value='<', name='LESS-THAN SIGN', category='Sm',
> width='Na'),
> Character(code=0x2264, value='≤', name='LESS-THAN OR EQUAL TO',
> category='Sm', width='A'),
> Character(code=0x2266, value='≦', name='LESS-THAN OVER EQUAL TO',
> category='Sm', width='A'),
> Character(code=0x2268, value='≨', name='LESS-THAN BUT NOT EQUAL TO',
> category='Sm', width='N'),
> Character(code=0x226A, value='≪', name='MUCH LESS-THAN', category='Sm',
> width='A'),
> Character(code=0x226E, value='≮', name='NOT LESS-THAN', category='Sm',
> width='A'),
> Character(code=0x2270, value='≰', name='NEITHER LESS-THAN NOR EQUAL TO',
> category='Sm', width='N'),
> Character(code=0x2272, value='≲', name='LESS-THAN OR EQUIVALENT TO',
> category='Sm', width='N'),
> Character(code=0x2274, value='≴', name='NEITHER LESS-THAN NOR EQUIVALENT
> TO', category='Sm', width='N'),
> Character(code=0x2276, value='≶', name='LESS-THAN OR GREATER-THAN',
> category='Sm', width='N'),
> Character(code=0x2277, value='≷', name='GREATER-THAN OR LESS-THAN',
> category='Sm', width='N'),
> Character(code=0x2278, value='≸', name='NEITHER LESS-THAN NOR
> GREATER-THAN', category='Sm', width='N'),
> Character(code=0x2279, value='≹', name='NEITHER GREATER-THAN NOR
> LESS-THAN', category='Sm', width='N'),
> Character(code=0x22D6, value='⋖', name='LESS-THAN WITH DOT',
> category='Sm', width='N'),
> Character(code=0x22D8, value='⋘', name='VERY MUCH LESS-THAN',
> category='Sm', width='N'),
> Character(code=0x22DA, value='⋚', name='LESS-THAN EQUAL TO OR
> GREATER-THAN', category='Sm', width='N'),
> Character(code=0x22DB, value='⋛', name='GREATER-THAN EQUAL TO OR
> LESS-THAN', category='Sm', width='N'),
> Character(code=0x22DC, value='⋜', name='EQUAL TO OR LESS-THAN',
> category='Sm', width='N'),
> Character(code=0x22E6, value='⋦', name='LESS-THAN BUT NOT EQUIVALENT TO',
> category='Sm', width='N'),
> Character(code=0x2343, value='⍃', name='APL FUNCTIONAL SYMBOL QUAD
> LESS-THAN', category='So', width='N'),
> Character(code=0x2976, value='⥶', name='LESS-THAN ABOVE LEFTWARDS ARROW',
> category='Sm', width='N'),
> Character(code=0x2977, value='⥷', name='LEFTWARDS ARROW THROUGH
> LESS-THAN', category='Sm', width='N'),
> Character(code=0x2993, value='⦓', name='LEFT ARC LESS-THAN BRACKET',
> category='Ps', width='N'),
> Character(code=0x2996, value='⦖', name='DOUBLE RIGHT ARC LESS-THAN
> BRACKET', category='Pe', width='N'),
> Character(code=0x29C0, value='⧀', name='CIRCLED LESS-THAN', category='Sm',
> width='N'),
> Character(code=0x2A79, value='⩹', name='LESS-THAN WITH CIRCLE INSIDE',
> category='Sm', width='N'),
> Character(code=0x2A7B, value='⩻', name='LESS-THAN WITH QUESTION MARK
> ABOVE', category='Sm', width='N'),
> Character(code=0x2A7D, value='⩽', name='LESS-THAN OR SLANTED EQUAL TO',
> category='Sm', width='N'),
> Character(code=0x2A7F, value='⩿', name='LESS-THAN OR SLANTED EQUAL TO WITH
> DOT INSIDE', category='Sm', width='N'),
> Character(code=0x2A81, value='⪁', name='LESS-THAN OR SLANTED EQUAL TO WITH
> DOT ABOVE', category='Sm', width='N'),
> Character(code=0x2A83, value='⪃', name='LESS-THAN OR SLANTED EQUAL TO WITH
> DOT ABOVE RIGHT', category='Sm', width='N')
> ,
> Character(code=0x2A85, value='⪅', name='LESS-THAN OR APPROXIMATE',
> category='Sm', width='N'),
> Character(code=0x2A87, value='⪇', name='LESS-THAN AND SINGLE-LINE NOT
> EQUAL TO', category='Sm', width='N'),
> Character(code=0x2A89, value='⪉', name='LESS-THAN AND NOT APPROXIMATE',
> category='Sm', width='N'),
> Character(code=0x2A8B, value='⪋', name='LESS-THAN ABOVE DOUBLE-LINE EQUAL
> ABOVE GREATER-THAN', category='Sm', width='N
> '),
> Character(code=0x2A8C, value='⪌', name='GREATER-THAN ABOVE DOUBLE-LINE
> EQUAL ABOVE LESS-THAN', category='Sm', width='N
> '),
> Character(code=0x2A8D, value='⪍', name='LESS-THAN ABOVE SIMILAR OR EQUAL',
> category='Sm', width='N'),
> Character(code=0x2A8F, value='⪏', name='LESS-THAN ABOVE SIMILAR ABOVE
> GREATER-THAN', category='Sm', width='N'),
> Character(code=0x2A90, value='⪐', name='GREATER-THAN ABOVE SIMILAR ABOVE
> LESS-THAN', category='Sm', width='N'),
> Character(code=0x2A91, value='⪑', name='LESS-THAN ABOVE GREATER-THAN ABOVE
> DOUBLE-LINE EQUAL', category='Sm', width='N
> '),
> Character(code=0x2A92, value='⪒', name='GREATER-THAN ABOVE LESS-THAN ABOVE
> DOUBLE-LINE EQUAL', category='Sm', width='N
> '),
> Character(code=0x2A93, value='⪓', name='LESS-THAN ABOVE SLANTED EQUAL
> ABOVE GREATER-THAN ABOVE SLANTED EQUAL', categor
> y='Sm', width='N'),
> Character(code=0x2A94, value='⪔', name='GREATER-THAN ABOVE SLANTED EQUAL
> ABOVE LESS-THAN ABOVE SLANTED EQUAL', categor
> y='Sm', width='N'),
> Character(code=0x2A95, value='⪕', name='SLANTED EQUAL TO OR LESS-THAN',
> category='Sm', width='N'),
> Character(code=0x2A97, value='⪗', name='SLANTED EQUAL TO OR LESS-THAN WITH
> DOT INSIDE', category='Sm', width='N'),
> Character(code=0x2A99, value='⪙', name='DOUBLE-LINE EQUAL TO OR
> LESS-THAN', category='Sm', width='N'),
> Character(code=0x2A9B, value='⪛', name='DOUBLE-LINE SLANTED EQUAL TO OR
> LESS-THAN', category='Sm', width='N'),
> Character(code=0x2A9D, value='⪝', name='SIMILAR OR LESS-THAN',
> category='Sm', width='N'),
> Character(code=0x2A9F, value='⪟', name='SIMILAR ABOVE LESS-THAN ABOVE
> EQUALS SIGN', category='Sm', width='N'),
> Character(code=0x2AA1, value='⪡', name='DOUBLE NESTED LESS-THAN',
> category='Sm', width='N'),
> Character(code=0x2AA3, value='⪣', name='DOUBLE NESTED LESS-THAN WITH
> UNDERBAR', category='Sm', width='N'),
> Character(code=0x2AA4, value='⪤', name='GREATER-THAN OVERLAPPING
> LESS-THAN', category='Sm', width='N'),
> Character(code=0x2AA5, value='⪥', name='GREATER-THAN BESIDE LESS-THAN',
> category='Sm', width='N'),
> Character(code=0x2AA6, value='⪦', name='LESS-THAN CLOSED BY CURVE',
> category='Sm', width='N'),
> Character(code=0x2AA8, value='⪨', name='LESS-THAN CLOSED BY CURVE ABOVE
> SLANTED EQUAL', category='Sm', width='N'),
> Character(code=0x2AF7, value='⫷', name='TRIPLE NESTED LESS-THAN',
> category='Sm', width='N'),
> Character(code=0x2AF9, value='⫹', name='DOUBLE-LINE SLANTED LESS-THAN OR
> EQUAL TO', category='Sm', width='N'),
> Character(code=0xFE64, value='﹤', name='SMALL LESS-THAN SIGN',
> category='Sm', width='W'),
> Character(code=0xFF1C, value='<', name='FULLWIDTH LESS-THAN SIGN',
> category='Sm', width='F'),
> Character(code=0xE003C, value='', name='TAG LESS-THAN SIGN',
> category='Cf', width='N')
>
> On Wed, 16 Sep 2020 at 10:34, Andrea Giammarchi via Unicode <
> unicode at unicode.org> wrote:
>
>> What your right eye sees can't compete with what the outer world actually
>> is 😂
>>
>> (emoji with no less-than on purpose)
>>
>> On Wed, Sep 16, 2020 at 3:22 PM Shriramana Sharma <samjnaa at gmail.com>
>> wrote:
>>
>>> There's a less than symbol in that 😉 as well.
>>>
>>> On Wed, 16 Sep, 2020, 18:07 Andrea Giammarchi, <
>>> andrea.giammarchi at gmail.com> wrote:
>>>
>>>> easy to visualize too, same for me too ... it's actually semantic, if
>>>> you don't think it's a "v" but an equal = that rotates axes to indicate 0 <
>>>> 1, 1 = 1, 2 > 1 😉
>>>>
>>>> also, what's the meaning of winking? (kidding)
>>>>
>>>> best regards
>>>>
>>>> On Wed, Sep 16, 2020 at 2:19 PM Shriramana Sharma via Unicode <
>>>> unicode at unicode.org> wrote:
>>>>
>>>>> When I was a child and first taught < and > at school, I figured that
>>>>> they were derived from the equals sign =, except that the bigger
>>>>> number has the bigger separation between the lines and the smaller
>>>>> number has the smaller separation becoming none. So I do see meaning
>>>>> in it.
>>>>>
>>>>> And it was obviously named the less than sign long before it was used
>>>>> for XML tags.
>>>>>
>>>>> --
>>>>> Shriramana Sharma ஶ்ரீரமணஶர்மா श्रीरमणशर्मा 𑀰𑁆𑀭𑀻𑀭𑀫𑀡𑀰𑀭𑁆𑀫𑀸
>>>>>
>>>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://corp.unicode.org/pipermail/unicode/attachments/20200916/668c3965/attachment.htm>


More information about the Unicode mailing list