From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM autolearn=ham autolearn_force=no version=3.4.4 X-Google-Thread: a07f3367d7,c02604a46964120 X-Google-Attributes: gida07f3367d7,public,usenet X-Google-NewGroupId: yes X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news2.google.com!news1.google.com!news2.google.com!news.glorb.com!newsfeed2.telusplanet.net!newsfeed.telus.net!edtnps82.POSTED!7564ea0f!not-for-mail Newsgroups: comp.lang.ada From: Duke Normandin Subject: Re: Noob question: universal_integer type References: <85pemlFod9U1@mid.individual.net> User-Agent: slrn/0.9.8.1 (Darwin) Message-ID: <7DQJn.4466$Z6.1110@edtnps82> Date: Sat, 22 May 2010 13:04:03 GMT NNTP-Posting-Host: 75.154.122.116 X-Trace: edtnps82 1274533443 75.154.122.116 (Sat, 22 May 2010 07:04:03 MDT) NNTP-Posting-Date: Sat, 22 May 2010 07:04:03 MDT Xref: g2news2.google.com comp.lang.ada:11880 Date: 2010-05-22T13:04:03+00:00 List-Id: On 2010-05-22, Niklas Holsti wrote: > Jeffrey R. Carter wrote: >> Duke Normandin wrote: >>> >>> Let me get this right... if I use an undeclared integer in an expression, >>> Ada will "deem it" to be a "universal_integer" and not choke at >>> compile-time? >> >> I don't know, and I've been using Ada since 1984. What is "an undeclared >> integer"? >> >> 17 is an integer literal; all integer literals are universal_integer. 17 >> is not an undeclared integer. >> >> What the tutorial is trying to get across is that Ada, unlike some >> languages, does not have typed numeric literals (see also >> universal_real). You might encounter a language in which 10 is a literal >> of type int and 10L a literal of long int, for example. In Ada, all >> integer literals are universal_integer, and implicitly converted to >> specific integer types as required. >> >> Partly this makes life easier: you can change the type of a variable and >> not have to change all the literals used with that variable; and partly >> it's pretty much needed in a language that lets you define your own >> numeric types. > > Perhaps it is also worth mentioning that Ada does have a way of > explicitly indicating the type to be chosen for a literal, by > "qualifying" it with a type name. This can be necessary to resolve > overloaded operation names. For example, assume that you define two > integer types: > > type Apples is range 0 .. 20; > type Ants is range 0 .. 1_000_000; > > and then define a procedure "Eat" for each type, with different content > for eating apples and for eating ants: > > procedure Eat (Items : Apples) ... end Eat; > > procedure Eat (Items : Ants) ... end Eat; > > A call of Eat with a literal parameter, for example Eat (17), is then > ambiguous (and the compiler will tell you so). To show if you are eating > apples or ants, you qualify the literal with the type name and an > apostrophe, as in > > Eat (Apples'(17)); > > for eating 17 apples, or > > Eat (Ants'(17)) > > for eating 17 ants. Since the type of the parameter is now explicit, the > compiler knows which procedure Eat is to be called. > I love it! and the compiler would choke with an "out of bounds" exception if you called Eat (Apples'(25)); - if I understand the Coronado tutorial correctly. Thanks for the input... -- Duke Normandin *** Tolerance becomes a crime, when applied to evil [Thomas Mann] ***