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=-0.3 required=5.0 tests=BAYES_00, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: 103376,91276ec2ea911d3f X-Google-Attributes: gid103376,public X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news2.google.com!news4.google.com!border1.nntp.dca.giganews.com!nntp.giganews.com!newsfeed00.sul.t-online.de!t-online.de!feeder.news-service.com!tudelft.nl!txtfeed1.tudelft.nl!feeder3.cambrium.nl!feed.tweaknews.nl!proxad.net!newsfeed.arcor.de!newsspool4.arcor-online.net!news.arcor.de.POSTED!not-for-mail From: "Dmitry A. Kazakov" Subject: Re: Generic procedures and their parameters Newsgroups: comp.lang.ada User-Agent: 40tude_Dialog/2.0.15.1 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Reply-To: mailbox@dmitry-kazakov.de Organization: cbb software GmbH References: Date: Wed, 6 Sep 2006 11:43:15 +0200 Message-ID: NNTP-Posting-Date: 06 Sep 2006 11:43:15 CEST NNTP-Posting-Host: f654b411.newsspool4.arcor-online.net X-Trace: DXC=2B[g_@c?@2cm7>ihJR;B_c4IUK\BH3Yb\iCdKMSR0`jDNcfSJ;bb[eFCTGGVUmh?dN\HXHJ4e80nW5R;jX3lQWk X-Complaints-To: usenet-abuse@arcor.de Xref: g2news2.google.com comp.lang.ada:6466 Date: 2006-09-06T11:43:15+02:00 List-Id: On Wed, 06 Sep 2006 10:51:48 +0200, Maciej Sobczak wrote: > eneric > type Index_Type is (<>); > type Element_Type is private; > type Array_Type is array (Index_Type range <>) of Element_Type; > with function "<" (Left, Right : in Element_Type) return Boolean is <>; > procedure Sort(To_Sort : in out Array_Type); > > My question is: what's the purpose of the third parameter (Array_Type)? > Isn't it implied by the first two and therefore just redundant? Reverse. Actually Index_Type and Element_Type are redundant. In a better Ada it should be: generic type Container_Type is array (<>) of <>; -- or "(<>) is limited private array" with function "<" (Left, Right : in Container_Type'Element) return Boolean is <>; procedure Sort (To_Sort : in out Container_Type); [ Even better it be non-generic: procedure Sort (To_Sort : in out Container_Of_Ordered'Class); where each container type (like an array) be a member of the class, if its elements are in Ordered'Class. ] Regarding Array_Type being implied, it is not. You can have any number of array types based on exactly same combination of index and element types. These types will be different types: type I is ...; type E is ...; type Array1 is array (I range <>) of E; type Array2 is array (I range <>) of E; The types Array1 and Array2 are distinct types. Sort must be instantiated for each of them (or else you have to convert types). The reverse is a different story. It is a pity that Ada does not have attributes to get the index and element types from the array type (container type). The next step would be getting "<" from the element type, which would eliminate a need to have Sort generic. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de