From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on ip-172-31-74-118.ec2.internal X-Spam-Level: X-Spam-Status: No, score=-0.9 required=3.0 tests=BAYES_00,FREEMAIL_FROM, PDS_FROM_2_EMAILS autolearn=no autolearn_force=no version=3.4.6 X-Received: by 2002:a05:620a:4044:: with SMTP id i4mr10742218qko.271.1636731842454; Fri, 12 Nov 2021 07:44:02 -0800 (PST) X-Received: by 2002:a5b:502:: with SMTP id o2mr16175281ybp.452.1636731842228; Fri, 12 Nov 2021 07:44:02 -0800 (PST) Path: eternal-september.org!reader02.eternal-september.org!weretis.net!feeder8.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail Newsgroups: comp.lang.ada Date: Fri, 12 Nov 2021 07:44:02 -0800 (PST) In-Reply-To: Injection-Info: google-groups.googlegroups.com; posting-host=109.43.49.191; posting-account=3ciIaAoAAAA6pCfildcdAcuc3UQuirtL NNTP-Posting-Host: 109.43.49.191 References: User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <55ac4ea4-da26-4c62-9a30-f32cf241a347n@googlegroups.com> Subject: Re: Beginners question From: "uq5huo...@gmail.com" Injection-Date: Fri, 12 Nov 2021 15:44:02 +0000 Content-Type: text/plain; charset="UTF-8" Xref: reader02.eternal-september.org comp.lang.ada:63113 List-Id: Niklas Holsti schrieb am Freitag, 12. November 2021 um 16:24:20 UTC+1: > On 2021-11-12 16:32, uq5huo...@gmail.com wrote: > > Hi, > > > > I'm beginning to play with Ada, and run into this > > > > with Ada.Text_IO; use Ada.Text_IO; > > procedure Learn is > > subtype Alphabet is Character range 'A' .. 'Z'; > > begin > > Put_Line ("Learning Ada from " & Alphabet'First & " to " & Alphabet'Last); > > end Learn; > > > > Now I want to play a bit with the code ... and this fails and I don't get why and how to solve. > > > > Put_Line ("Learning Ada from " & Alphabet'First & " to " & Alphabet'Last-1); > > or > > Put_Line ("Learning Ada from " & Alphabet'First & " to " & (Alphabet'Last-1)); > > > > Anyone more expirienced can explain this to my, please? > The Character type is not an integer type (unlike "char" in C), so you > cannot subtract 1 from a Character (or an Alphabet value). Character is > an enumeration type in Ada. > > To get the Alphabet value immediately preceding Alphabet'Last, use the > Pred ("predecessor") attribute function: > > Alphabet'Pred (Alphabet'Last) > > If you need to take larger strides in the Alphabet enumeration, you can > use the Pos and Val attribute functions. Pos returns the "position > number" of its argument, and that is an integer. Val performs the > opposite mapping. For example, to get the Alphabet value that is three > positions before Alphabet'Last, you can do > > Alphabet'Val (Alphabet'Pos (Alphabet'Last) - 3) Dear Niklas, thanks for the explanation. So I run into the strong typing and Ada prevents me to programm C-like. I really like that. :-) I will read more onto the attributes to get familar with this.