Spelling of ordinal numbers: Difference between revisions

→‎{{header|Perl 6}}: Update for Unicode 12.1, added introspection, some other tweaks and verbiage
m (→‎{{header|Perl 6}}: Update for module change)
(→‎{{header|Perl 6}}: Update for Unicode 12.1, added introspection, some other tweaks and verbiage)
Line 532:
 
=={{header|Perl 6}}==
{{works with|Rakudo|20172019.0807.1}}
 
Rakudo version 2019.07.1 is updated to Unicode version 12.1. Unicode version 12.0 introduced some new numeric digits, which changed the output here a bit. This will ''work'' with earlier versions of Rakudo, but will yield slightly different results.
 
This would be pretty simple to implement from scratch; it would be straightforward to do a minor modification of the [[Number_names#Perl_6| Number names]] task code. Much simpler to just use the Lingua::EN::Numbers module from the Perl 6 ecosystem though. It will easily handles ordinal number conversions.
 
We need to be slightly careful of terminology. In Perl 6, 123, 00123.0, & 1.23e2 are not all integers. They are respectively an Int (integer), a Rat (rational number) and a Num (floating point number). (The fourth numeric is a Complex) For this task it doesn't much matter as the ordinal routine coerces its argument to an Int, but to Perl 6 they are different things. We can further abuse allomorphic and String types and role mixins for some somewhat non-intuitive results as well.
 
Note that the different allomorphic integer forms of 123 are evaluated on ''use'', not on ''assignment''. They can be passed around in parameters, but until they are used numerically, they retain their stringy characteristics and are distinctive, determinable through introspection. The numerics are evaluated on assignment, hence the stringified output not exactly matching the input format. The mixin role returns different things depending on what context you evaluate it under. When evaluated as a string it is 17, numerically, it is 123.
 
Perl 6 uses Unicode natively. If ita glyph has a Unicode 'Numeric Digit' (<:Nd>) property, it is treated as a numeric digit, and may be used as one.
 
It is not really clear what is meant by "Write a driver and a function...". Well, the function part is clear enough; driver not so much. Perhaps this will suffice.
 
<lang perl6>use Lingua::EN::Numbers; # Version 2.4.0 or higher
 
# The task
+$_ ?? printf( "Type: \%-14s %16s : %s\n", $_.^name, $_, ordinal($_) ) !! say "\n$_:" for
 
# Testing
# 'Required tests',
|<1, 2, 3, 4, 5, 11, 65, 100, 101, 272, 23456, 8007006005004003>,
 
# 'Optional tests - different forms of 123',
# 'Numerics',
123, 00123.0, 1.23e2, 123+0i,
 
# 'Allomorphs',
# Numerics
|(<123, 1_2_3, 00123.0, 1.23e2, 123+0i) 0b1111011 0o173 0x7B 861/7>,
 
'Numeric Strings',
# Allomorphs
|<'1_2_3 00123.0 1.23e2 123+0i 0b1111011 0o173 0x7B 861/7>'.words,
 
'Unicode Numeric Strings',
# Unicode (Only using groups of digits from the same Unicode block. Technically,
# digits from any block could be combined with digits from any other block.)
|((^0x1FFFF).grep( { .chr ~~ /<:Nd>/ and .unival == 1|2|3 }).rotor(3)».chr».join,
.chr.uniname ~~ / "DIGIT ONE" | "DIGIT TWO" | "DIGIT THREE" /
}).rotor(3)».chr».join),
 
'Role Mixin',
# type system abuse (role mixin)
'17' but 123;</lang>
{{out}}
<pre>Required tests:
<pre> 1 : first
Type: Int 21 : secondfirst
Type: Int 32 : thirdsecond
Type: Int 43 : fourththird
Type: Int 54 : fifthfourth
Type: Int 115 : eleventhfifth
Type: Int 6511 : sixty-fiftheleventh
Type: Int 100 : one hundredth 65 : sixty-fifth
Type: Int 101 100 : one hundred firsthundredth
Type: Int 272101 : twoone hundred seventy-secondfirst
Type: Int 23456 : twenty-three thousand, four 272 : two hundred fiftyseventy-sixthsecond
Type: Int 23456 : twenty-three thousand, four hundred fifty-sixth
Type: Int 8007006005004003 : eight quadrillion, seven trillion, six billion, five million, four thousand third
123 : one hundred twenty-third
 
123 : one hundred twenty-third
Optional tests - different forms of 123:
123 : one hundred twenty-third
 
123 : one hundred twenty-third
Numerics:
123+0i : one hundred twenty-third
Type: Int 1_2_3 123 : one hundred twenty-third
Type: Rat 00123.0 123 : one hundred twenty-third
Type: Num 1.23e2 123 : one hundred twenty-third
Type: Complex 123+0i : one hundred twenty-third
 
0b1111011 : one hundred twenty-third
Allomorphs:
0o173 : one hundred twenty-third
Type: IntStr 0x7B 123 : one hundred twenty-third
Type: IntStr 861/7 1_2_3 : one hundred twenty-third
Type: RatStr 123 00123.0 : one hundred twenty-third
Type: NumStr ١٢٣ 1.23e2 : one hundred twenty-third
Type: ComplexStr ۱۲۳ 123+0i : one hundred twenty-third
Type: IntStr ߁߂߃ 0b1111011 : one hundred twenty-third
Type: IntStr १२३ 0o173 : one hundred twenty-third
Type: IntStr ১২৩ 0x7B : one hundred twenty-third
Type: RatStr ੧੨੩ 861/7 : one hundred twenty-third
 
૧૨૩ : one hundred twenty-third
Numeric Strings:
୧୨୩ : one hundred twenty-third
Type: Str ௧௨௩ 1_2_3 : one hundred twenty-third
Type: Str ౧౨౩ 00123.0 : one hundred twenty-third
Type: Str ೧೨೩ 1.23e2 : one hundred twenty-third
Type: Str ൧൨൩ 123+0i : one hundred twenty-third
Type: Str ෧෨෩ 0b1111011 : one hundred twenty-third
Type: Str ๑๒๓ 0o173 : one hundred twenty-third
Type: Str ໑໒໓ 0x7B : one hundred twenty-third
Type: Str ༡༢༣ 861/7 : one hundred twenty-third
 
၁၂၃ : one hundred twenty-third
Unicode Numeric Strings:
႑႒႓ : one hundred twenty-third
Type: Str ១២៣ 123 : one hundred twenty-third
Type: Str ᠑᠒᠓ ١٢٣ : one hundred twenty-third
Type: Str ᥇᥈᥉ ۱۲۳ : one hundred twenty-third
Type: Str ᧑᧒᧓ ߁߂߃ : one hundred twenty-third
Type: Str ᪁᪂᪃ १२३ : one hundred twenty-third
Type: Str ᪑᪒᪓ ১২৩ : one hundred twenty-third
Type: Str ᭑᭒᭓ ੧੨੩ : one hundred twenty-third
Type: Str ᮱᮲᮳ ૧૨૩ : one hundred twenty-third
Type: Str ᱁᱂᱃ ୧୨୩ : one hundred twenty-third
Type: Str ᱑᱒᱓ ௧௨௩ : one hundred twenty-third
Type: Str ꘡꘢꘣ ౧౨౩ : one hundred twenty-third
Type: Str ꣑꣒꣓ ೧೨೩ : one hundred twenty-third
Type: Str ꤁꤂꤃ ൧൨൩ : one hundred twenty-third
Type: Str ꧑꧒꧓ ෧෨෩ : one hundred twenty-third
Type: Str ꧱꧲꧳ ๑๒๓ : one hundred twenty-third
Type: Str ꩑꩒꩓ ໑໒໓ : one hundred twenty-third
Type: Str ꯱꯲꯳ ༡༢༣ : one hundred twenty-third
Type: Str 123 ၁၂၃ : one hundred twenty-third
Type: Str 𐒡𐒢𐒣 ႑႒႓ : one hundred twenty-third
Type: Str 𐴱𐴲𐴳 ១២៣ : one hundred twenty-third
Type: Str 𑁧𑁨𑁩 ᠑᠒᠓ : one hundred twenty-third
Type: Str 𑃱𑃲𑃳 ᥇᥈᥉ : one hundred twenty-third
Type: Str 𑄷𑄸𑄹 ᧑᧒᧓ : one hundred twenty-third
Type: Str 𑇑𑇒𑇓 ᪁᪂᪃ : one hundred twenty-third
Type: Str 𑋱𑋲𑋳 ᪑᪒᪓ : one hundred twenty-third
Type: Str 𑑑𑑒𑑓 ᭑᭒᭓ : one hundred twenty-third
Type: Str 𑓑𑓒𑓓 ᮱᮲᮳ : one hundred twenty-third
Type: Str 𑙑𑙒𑙓 ᱁᱂᱃ : one hundred twenty-third
Type: Str 𑛁𑛂𑛃 ᱑᱒᱓ : one hundred twenty-third
Type: Str 𑜱𑜲𑜳 ꘡꘢꘣ : one hundred twenty-third
Type: Str 𑣡𑣢𑣣 ꣑꣒꣓ : one hundred twenty-third
Type: Str 𑱑𑱒𑱓 ꤁꤂꤃ : one hundred twenty-third
Type: Str 𑵑𑵒𑵓 ꧑꧒꧓ : one hundred twenty-third
Type: Str 𑶡𑶢𑶣 ꧱꧲꧳ : one hundred twenty-third
Type: Str 𖩡𖩢𖩣 ꩑꩒꩓ : one hundred twenty-third
Type: Str 𖭑𖭒𖭓 ꯱꯲꯳ : one hundred twenty-third
Type: Str 𝟏𝟐𝟑 123 : one hundred twenty-third
Type: Str 𝟙𝟚𝟛 𐒡𐒢𐒣 : one hundred twenty-third
Type: Str 𝟣𝟤𝟥 𐴱𐴲𐴳 : one hundred twenty-third
Type: Str 𝟭𝟮𝟯 𑁧𑁨𑁩 : one hundred twenty-third
Type: Str 𝟷𝟸𝟹 𑃱𑃲𑃳 : one hundred twenty-third
Type: Str 𞥑𞥒𞥓 𑄷𑄸𑄹 : one hundred twenty-third
Type: Str 17𑇑𑇒𑇓 : one hundred twenty-third</pre>
Type: Str 123 𑋱𑋲𑋳 : one hundred twenty-third
Type: Str 123 𑑑𑑒𑑓 : one hundred twenty-third
Type: Str 123 𑓑𑓒𑓓 : one hundred twenty-third
Type: Str 123+0i 𑙑𑙒𑙓 : one hundred twenty-third
Type: Str 0b1111011 𑛁𑛂𑛃 : one hundred twenty-third
Type: Str 0o173 𑜱𑜲𑜳 : one hundred twenty-third
Type: Str ૧૨૩ 𑣡𑣢𑣣 : one hundred twenty-third
Type: Str ୧୨୩ 𑱑𑱒𑱓 : one hundred twenty-third
Type: Str ၁၂၃ 𑵑𑵒𑵓 : one hundred twenty-third
Type: Str ႑႒႓ 𑶡𑶢𑶣 : one hundred twenty-third
Type: Str 𖩡𖩢𖩣 : one hundred twenty-third
Type: Str 𖭑𖭒𖭓 : one hundred twenty-third
Type: Str 𝟏𝟐𝟑 : one hundred twenty-third
Type: Str 𝟙𝟚𝟛 : one hundred twenty-third
Type: Str 𝟣𝟤𝟥 : one hundred twenty-third
Type: Str 𝟭𝟮𝟯 : one hundred twenty-third
Type: Str 𝟷𝟸𝟹 : one hundred twenty-third
Type: Str 𞥑𞥒𞥓 : one hundred twenty-third
 
Role Mixin:
Type: Str+{<anon|1>} 12317 : one hundred twenty-third</pre>
 
=={{header|Phix}}==
10,333

edits