comp.lang.ada
 help / color / mirror / Atom feed
From: hathawa2@marshall.edu (Mark S. Hathaway)
Subject: Re: "Subtract C, add Ada"
Date: 7 Feb 95 12:58:26 EDT
Date: 1995-02-07T12:58:26-04:00	[thread overview]
Message-ID: <1995Feb7.125826@hobbit> (raw)
In-Reply-To: 3gsr0e$oin@miranda.gmrc.gecm.com

> In article <3gsr0e$oin@miranda.gmrc.gecm.com>,
> bill@valiant (R.A.L Williams) writes:

> : In article <3gnnfk$bfa@Starbase.NeoSoft.COM> Samuel Mize wrote:
 
> [summary of previous discussions...]

> : >...The original
> : >C code was:
> : >	while ( (c = getchar()) == ' ' ) { /* count spaces */ }

> : To make truly equivalent Ada code, you would need a function,
> : probably in a shared file package, that assigns and returns
> : the next character from the file:
> :
> :     package Files_Like_C is
> :       C: character;
> :       function Next_Char return character;
> :     end Files_Like_C;
> : 
> :     with Text_Io; use Text_Io;
> :     package body Files_Like_C is
> :       function Next_Char return character is
> :       begin
> :         if End_Of_File then
> :           C := Ascii.Nul; -- no EOF character so using NUL
> :         else              -- to emulate the C string terminator
> :           Get (C);
> :           return C;
> :         end if;
> :       end Next_Char;
> :     end Files_Like_C;
> :
> : Once all this infrastructure has been set up, you can code:
> :
> :     while (Next_Char = ' ') loop
> :       null; -- count spaces here if needed
> :     end loop;
> :
> : Before anyone says "but look at all that code!" remember, we
> : are recoding the interface to the standard file package, on
> : the assumption that there is a compelling reason to put
> : Next_Char into expressions.

> Never mind all that code, the main feature of the C code was that, at
> the termination of the loop, the variable 'c' contained the character
> which caused the loop to terminate. Are you suggesting a 'LastChar'
> function as well. 
> 
> Look, Ada's a great language. Its got lots of innovative features:
> built in tasking, compilable package specifications, etc. but, to me,
> and, I suspect, to numerous others, the dedication with which 'unsafe'
> constructs was eliminated went a little too far, to the detriment
> of readability.

I feel certain that the C example could be emulated in Ada or many other
languages.  What is painfully obvious now is that the author of the C
code didn't comment it in any way to say precisely what he/she was trying
to achieve with that code.  If counting spaces was intended, as many of
us thought, then the Ada "version" does quite nicely.  If the character
gotten on the last go around is needed for later then where is the C code
which uses that character.  Without some followup code it isn't obvious
to anyone that that last character will be used in the future, and yet
the poster says this was "the main feature of the C code".  I can hardly
agree.

The C version doesn't check for an eof() condition before reading stdin.
The author of the Ada code added that check.  I'm not certain it's necessry
or correct with the object in (standard input stream).  Should it ever be
at eof()?  This is a design decision rather than a programmer's choice.

  proc count_chars () is
    var c     is character := NUL;
        count is integer   := 0;
  begin
    loop
      c := in.getch();      -- could also be written:  c.assign(in.getch());
      if c <> ' ' then
        exit;               -- drops out of the loop
      else
        count.increment(1);
      end;
    end;
  end count_chars;

Anyone can cram it into a smaller form if they like...

  loop c := in.getch(); if c <> ' ' then exit; else
    count.increment(1); end; end;

but, that's hardly the point.


Mark S. Hathaway       <hathawa2@marshall.edu>



       reply	other threads:[~1995-02-07 16:58 UTC|newest]

Thread overview: 85+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <3gsr0e$oin@miranda.gmrc.gecm.com>
1995-02-07 16:58 ` Mark S. Hathaway [this message]
1995-02-08  7:39   ` "Subtract C, add Ada" Travis C. Porco
1995-02-08 16:07     ` Fred J. McCall
1995-02-08 21:30       ` Garlington KE
1995-02-10 13:49 R.A.L Williams
  -- strict thread matches above, loose matches on Subject: below --
1995-01-31  9:34 R.A.L Williams
1995-02-01 16:45 ` Charles H. Sampson
1995-01-23  8:49 R.A.L Williams
1995-01-25 23:18 ` Charles H. Sampson
1995-01-20 10:20 R.A.L Williams
1995-01-20 13:22 ` Renaud HEBERT
1995-01-24  3:35   ` David Moore
1995-01-25  5:38     ` Robert Dewar
1995-01-28 16:35     ` Jules
1995-01-29  8:06       ` Matt Kennel
1995-01-30  5:31       ` Michael Feldman
1995-01-31 22:22         ` David O'Brien
1995-01-24 20:23   ` N. Mellor
1995-01-25  8:50     ` Robb Nebbe
1995-01-25 14:19     ` John Volan
1995-01-26  5:07     ` Samuel Mize
1995-01-26 18:51       ` Mark A Biggar
1995-01-21 15:18 ` Robert Dewar
1995-01-21 21:03 ` David O'Brien
1995-01-23  3:09   ` Jay Martin
1995-01-23 12:50     ` Andrew McConnell
1995-01-24  0:54     ` Matt Kennel
1995-01-25 17:03       ` Norman H. Cohen
1995-01-26  1:13         ` Dr. Richard Botting
1995-01-26 14:32         ` Anders Juul Munch
1995-01-24  0:17   ` Bob Kitzberger
1995-01-23 20:46 ` Robert Firth
1995-01-24 14:25   ` Samuel Mize
1995-01-25  7:27     ` David O'Brien
1995-01-25 12:14     ` Robert A Duff
1995-01-25  5:57   ` David O'Brien
     [not found]     ` <3g9rf0$71k@Starbase.NeoSoft.COM>
1995-01-28 21:08       ` David O'Brien
1995-01-31 18:07         ` Samuel Mize
1995-02-01 10:23         ` Samuel Mize
1995-01-30  0:24     ` Mark S. Hathaway
1995-01-31  3:30       ` Jay Martin
1995-02-01 13:25         ` Jesper Kaagaard
1995-01-20  9:33 R.A.L Williams
     [not found] <3fgphd$sc3@rational.rational.com>
1995-01-20  5:51 ` RonaldS60
1995-02-07 13:55   ` Robert C. Soong
     [not found] <3fdcoi$chn@miranda.gmrc.gecm.com>
1995-01-20  5:01 ` Samuel Mize
1995-01-20 22:07   ` Garlington KE
1995-01-24  5:02     ` R_Tim_Coslet
     [not found] <3etund$hnr@miranda.gmrc.gecm.com>
1995-01-12  9:56 ` Erik Svensson
1995-01-12 14:44 ` Norman H. Cohen
1995-01-13  1:51 ` David O'Brien
1995-01-13 12:38   ` Laurent Gasser
1995-01-13 20:53     ` John DiCamillo
     [not found]       ` <3f8fnf$c8p@gamma.ois.com>
1995-01-16 11:02         ` Matt Kennel
     [not found]         ` <milodD2IFpG.329@netcom.com>
1995-01-17 21:39           ` R. William Beckwith
     [not found]       ` <3fa11q$sdh@gnat.cs.nyu.edu>
1995-01-16 20:20         ` David Moore
1995-01-14  0:24     ` David O'Brien
1995-01-20  4:43     ` Samuel Mize
1995-01-21 20:28       ` David O'Brien
1995-01-22 21:12         ` Robert Dewar
1995-01-23 18:35         ` Norman H. Cohen
1995-01-23 19:18         ` John Cosby - The Coz
1995-01-24 14:11         ` Samuel Mize
1995-01-14 10:37   ` Keith Thompson
     [not found]     ` <3fcjgt$b0v@cronkite.seas.gwu.edu>
1995-01-16 18:47       ` Robert Dewar
     [not found]   ` <D2It0r.4rp@inmet.camb.inmet.com>
1995-01-17 14:11     ` Norman H. Cohen
1994-12-30 16:06 Mitch Gart
1995-01-03 19:04 ` whiting_ms@corning.com (Matt Whiting)
1995-01-05  4:31   ` Michael Feldman
1995-01-04 21:40 ` Fred McCall
1995-01-05  4:30   ` Richard Pattis
1995-01-05 16:07   ` Kevin Weise
1995-01-06 13:06   ` Jahn Rentmeister
1995-01-06 16:47     ` Laurent Gasser
1995-01-06 17:29       ` David Weller
1995-01-06 17:30         ` David Weller
1995-01-10 18:28       ` Bob Kitzberger
1995-01-06 23:36   ` Kenneth Almquist
1995-01-04 22:45 ` Jay M. Martin
1995-01-05  4:37   ` Michael Feldman
1995-01-05 18:08     ` Jay Martin
1995-01-05 23:56       ` Robert Dewar
1995-01-08  8:04         ` Jay Martin
1995-01-06  0:07       ` Michael M. Bishop
1995-01-10 21:30         ` Jay Martin
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox