f



"out" and "in out"

Hi i found the following explaination:

In Ada, "in" parameters are similar to C++ const parameters. They are
effectively read-only within the scope of the called subprogram.
Ada "in out" parameters have a reliable initial value (that passed
in from the calling subprogram) and may be modified within the scope
of the called procedure. Ada "out" parameters have no reliable
initial value, but are expected to be assigned a value within the
called procedure.

What does "have no reliable initial value" mean when considering the "out"
parameter?

By chance I created a small program as follows:

===========
s : string := "CAT";

procedure modify ( s1 : out string ) is
begin
   s1(2) := 'U';
end modify;

...

put ( modify(s) );
===========

now I get as a result "CUT", and i dont understand why i get this result.
Doesnt the "out" specify that its initial value isnt passed in via the
parameter? But it seems to be passed in the above. In fact the "out" is
acting like an "in out". I am a little confused. Could someone shed some
light on this?

Many thanks!

zork



0
zork5207 (13)
7/26/2004 9:58:22 AM
comp.lang.ada 8774 articles. 2 followers. Post Follow

4 Replies
2607 Views

Similar Articles

[PageSpeed] 19

"zork" <zork@nospam.com> wrote in message news:4104d5de@dnews.tpgi.com.au...
> Hi i found the following explaination:
>
> In Ada, "in" parameters are similar to C++ const parameters. They are
> effectively read-only within the scope of the called subprogram.
> Ada "in out" parameters have a reliable initial value (that passed
> in from the calling subprogram) and may be modified within the scope
> of the called procedure. Ada "out" parameters have no reliable
> initial value, but are expected to be assigned a value within the
> called procedure.
>
> What does "have no reliable initial value" mean when considering the "out"
> parameter?
It means that wihn the procedure "modify," if youo attempt to read the
value of the formal parameter "s1," it would "have no reliable initial
value."
It has no bearing on the value of the actual parameter "s."
>
> By chance I created a small program as follows:
>
> ===========
> s : string := "CAT";
>
> procedure modify ( s1 : out string ) is
> begin
>    s1(2) := 'U';
> end modify;
>
> ..
>
> put ( modify(s) );
> ===========
>
> now I get as a result "CUT", and i dont understand why i get this result.
> Doesnt the "out" specify that its initial value isnt passed in via the
> parameter? But it seems to be passed in the above. In fact the "out" is
> acting like an "in out". I am a little confused. Could someone shed some
> light on this?
>
> Many thanks!
>
> zork
>
>
>
> _______________________________________________
> comp.lang.ada mailing list
> comp.lang.ada@ada-france.org
> http://www.ada-france.org/mailman/listinfo/comp.lang.ada
>
>

0
7/26/2004 11:00:31 AM
zork wrote:

> now I get as a result "CUT", and i dont understand why i get this result.
> Doesnt the "out" specify that its initial value isnt passed in via the
> parameter? But it seems to be passed in the above. In fact the "out" is
> acting like an "in out". I am a little confused. Could someone shed some
> light on this?

No it means: Does not *need* to be passed in. However, if using a pointer
instead of the value gives better performance the compiler will do that.
Also there are types which for technical reasons need to be passed using a
pointer.

What you have done comes under "undefined beahavior". If you used:

type s_type is new string (1 .. 3);

s : s_type = "CAT";

procedure modify ( s1 : out s_type) is
begin
���s1(2)�:=�'U';
end modify; 

things *might* be different on standart CPU's since s_type is smaller then
32 bit. BTW: String is indefinite and size therefore undefined. 

With Regards

Martin

-- 
mailto://krischik@users.sourceforge.net
http://www.ada.krischik.com

0
krischik (1357)
7/26/2004 11:30:11 AM
On Mon, 26 Jul 2004 19:58:22 +1000, zork <zork@nospam.com> wrote:

> ...
> By chance I created a small program as follows:
>
> ===========
> s : string := "CAT";
>
> procedure modify ( s1 : out string ) is
> begin
>    s1(2) := 'U';
> end modify;
>
> ..
>
> put ( modify(s) );
> ===========
>
> now I get as a result "CUT", and i dont understand why i get
> this result.

> Doesnt the "out" specify that its initial value isnt passed
> in via the parameter?

Yes, but it doesn't forbid the compiler to (effectively) pass
the value in. In practice, this is likely to happen if the
parameter is of a composite type (an array or record), because
the compiler will probably choose to pass it by reference.

> But it seems to be passed in the above. In fact the "out"
> is acting like an "in out".

Yes. This is permitted. But your program would be wrong to
rely upon it.

If you were to try:

===========
n : integer := 456;

procedure modify ( n1 : out integer ) is
begin
    n1 := n1+44;
end modify;

....

modify(n);
put(n);
===========

I think you might not get 500 printed out (I don't, running
this on GNAT 3.15p on Win XP (and GNAT gives a warning)).

-- 
Nick Roberts
0
nick.roberts (270)
7/26/2004 2:46:37 PM
Thanks for the response everyone. I need to be careful in my implementation.
Some things are obviously not obvious :)

cheers
zork


"Nick Roberts" <nick.roberts@acm.org> wrote in message
news:opsbq1zzd0p4pfvb@bram-2...
> On Mon, 26 Jul 2004 19:58:22 +1000, zork <zork@nospam.com> wrote:
>
> > ...
> > By chance I created a small program as follows:
> >
> > ===========
> > s : string := "CAT";
> >
> > procedure modify ( s1 : out string ) is
> > begin
> >    s1(2) := 'U';
> > end modify;
> >
> > ..
> >
> > put ( modify(s) );
> > ===========
> >
> > now I get as a result "CUT", and i dont understand why i get
> > this result.
>
> > Doesnt the "out" specify that its initial value isnt passed
> > in via the parameter?
>
> Yes, but it doesn't forbid the compiler to (effectively) pass
> the value in. In practice, this is likely to happen if the
> parameter is of a composite type (an array or record), because
> the compiler will probably choose to pass it by reference.
>
> > But it seems to be passed in the above. In fact the "out"
> > is acting like an "in out".
>
> Yes. This is permitted. But your program would be wrong to
> rely upon it.
>
> If you were to try:
>
> ===========
> n : integer := 456;
>
> procedure modify ( n1 : out integer ) is
> begin
>     n1 := n1+44;
> end modify;
>
> ...
>
> modify(n);
> put(n);
> ===========
>
> I think you might not get 500 printed out (I don't, running
> this on GNAT 3.15p on Win XP (and GNAT gives a warning)).
>
> -- 
> Nick Roberts


0
zork5207 (13)
7/28/2004 2:07:48 PM
Reply:

Similar Artilces:

why "::", not "."
Why does the method of modules use a dot, and the constants a double colon? e.g. Math::PI and Math.cos -- Posted via http://www.ruby-forum.com/. On Oct 26, 2010, at 01:48 , Oleg Igor wrote: > Why does the method of modules use a dot, and the constants a double > colon? > e.g. > Math::PI and Math.cos For the same reason why inner-classes/modules use double colon, because = they're constants and that's how you look up via constant namespace. Math::PI and ActiveRecord::Base are the same type of lookup... it is = just that Base is a module and PI is a float....

about "++" and "--"
why this program snippet display "8,7,7,8,-7,-8" the program is: main() { int i=8; printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i++,i--,-i++,-i--); } > why this program snippet display "8,7,7,8,-7,-8" Ask your compiler-vendor because this result is IMHO implementation-defined. Check this out: http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.15 http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.16 Regards, Irina Marudina fxc123@gmail.com wrote: > why this program snippet display "8,7,7,8,-7,-8&q...

Urgent need """""""""""INFORMATICA DEVELOPER"""""""""""""
Hello Partners, How are you ? Please find the requirements below. Title: Database/ETL Developer Duration: 6 months Location: NY Exp: 7+ Locals preferred Database/ETL requirements (Mandatory) Candidate must have worked with financial instruments, preferably Mutual Funds but, Equities are also ok. PL/SQL - packages, Stored procs, Functions, Aggregate functions, Pipelined Functions Informatica 8.6 - especially complex mappings, complex maplets, complex workflows, transformations Oracle 10g/11g Unix/Linux shell scripting Database/ETL requirements (Optional) Data warehousing experience Threading and job concepts in 10g/11g Cost based Optimizer concepts in 10g/11g Must : Experience with XML files and partitioning concepts in Oracle, Collections, Material Views Note : No phone calls please. : send Resumes to karthik@bhaninfo.com Thanks & Regards Karthik BhanInfo karthik@bhaninfo.com ...

"In" "Out" and "Trash"
I just bought a new computer and I re-installed Eudora Light on my new computer. But when I open Eudora, the "In", "Out" and "Trash" links are not on the left side of the screen the way they were on my old computer. How can I get these links back on the left side of the screen? Thank you. On 25 Mar 2007 09:49:22 -0700, "abx" <abfunex@yahoo.com> wrote: >I just bought a new computer and I re-installed Eudora Light on my new >computer. But when I open Eudora, the "In", "Out" and "Trash" links >are ...

Urgent JAVA Requirement in """"""NEW YORK"""""""""
Hello Partners, How are you ? Please find the requirement below. Location : NY Duration : 8 mnths Rate :Open Job description: Java/J2EE Web Service Developer =B7 (4+ years of application development experience in Java/J2EE and Web service technologies. =B7 Experience with spring & Hibernate. =B7 Experience with J2EE Application Server (preferably Web logic). =B7 Preferable Aqua logic DSP Experience =B7 Preferable Sonic ESB Composite Service experience Experience working in UNIX environment. Good working knowledge of Oracle RDBMS and PL/SQL) Note : Please send your updated resume along with contact no to Karthik@bhaninfo.com. Thanks & Regards Karthik BhanInfo karthik@bhaninfo.com # 1572, 7 th Floor Suites, 1 Blue Hill Plaza Pearl River,NY-10965 www.bhaninfo.com ...

puts "\\".gsub("\\", "\\\\")
Hello, I have a mini-ruby quiz. Guess what this line of code writes to the console, then try it for yourself: puts "\\".gsub("\\", "\\\\") Why is that so? Martin From: martinus [mailto:martin.ankerl@gmail.com]=20 # Hello, I have a mini-ruby quiz. Guess what this line of code writes to # the console, then try it for yourself: # puts "\\".gsub("\\", "\\\\") puts "\\".gsub("\\", "\\\\") \ #=3D> nil # Why is that so? faq. escaping the escape in sub/gsub. search the archives. maybe you want somethin...

Question about "sprintf" "@" "do for"
Hello, this works: A1=3D1 A2=3D2 A3=3D3 i=3D1 vari=3Dsprintf("A%.f",i) print vari,"=3D",@vari i=3Di+1 vari=3Dsprintf("A%.f",i) print vari,"=3D",@vari i=3Di+1 vari=3Dsprintf("A%.f",i) print vari,"=3D",@vari do for [i=3D1:3]{ vari=3Dsprintf("A%.f",i) print vari } But I want to have "print vari,"=3D",@vari" in the loop. But it dosen't=20 work. Why can't I use "print vari,"=3D",@vari" in the loop? Is there a=20 solution for? J=C3=B6rg Jörg ...

Gary Sokolich """"""
"""""""""" http://www.manta.com/c/mmlq5dm/w-gary-sokolich W Gary Sokolich 801 Kings Road Newport Beach, CA 92663-5715 (949) 650-5379 http://www.tbpe.state.tx.us/da/da022808.htm TEXAS BOARD OF PROFESSIONAL ENGINEERS February 28, 2008 Board Meeting Disciplinary Actions W. Gary Sokolich , Newport Beach, California �V File B-29812 - It was alleged that Dr. Sokolich unlawfully offered or attempted to practice engineering in Texas (...) Dr. Sokolich chose to end the proceedings by signing a Consent Order that was accepted by ...

why have both "." and "->" ?
I used to remember why c++ needed both ? Could somebody help me here ? For example class A{ f(); }; A* aa; You could do either "aa->f()" or "(*aa).f()". So why does C++ need both operators. Raj "raj" <rajkumar@hotmail.com> schreef in bericht news:d7fee6d0.0406230748.694b966b@posting.google.com... > I used to remember why c++ needed both ? > Could somebody help me here ? > > For example > > class A{ > f(); > }; > > A* aa; > > You could do either "aa->f()" or "(*aa).f()". So why does C++ need both operators. > > Raj There is a difference I believe that xxxx->yyyy is used if xxxx is a pointer to an object/class and xxxx.yyyyy if xxxx is the object/classs > class A{ > f(); > }; > > A* aa; > > You could do either "aa->f()" or "(*aa).f()". So why does C++ need both operators. IMHO it's simply convenience. Bye, Marco raj wrote: > > You could do either "aa->f()" or "(*aa).f()". So why does C++ need both > operators. The second form involves more typing and requires more effort to read. -- Russell Hanneken eunaarxra@cbobk.pbz Use ROT13 to decode my email address. In message <WOhCc.15115$Wr.8451@newsread1.news.pas.earthlink.net>, Russell Hanneken <me@privacy.net> writes >raj wrote: >> >> You could do either "aa->f()" or "(*aa...

"==" is NOT TRUE "==", WHY?
[CODE START] x=5; y=8; if (x + y + 1E-15 == 13) a = 3 else a = 8 end [CODE END] When x + y + 1E-15, the code above returns a = 8. When x + y + 1E-16, the code above returns a = 3. Why? Kindly advise. Thanks. "onemilimeter Chen" <onemm@example.com> wrote in message <g7adrj$5tr$1@fred.mathworks.com>... > [CODE START] > x=5; > y=8; > if (x + y + 1E-15 == 13) > a = 3 > else > a = 8 > end > [CODE END] > > When x + y + 1E-15, the code above returns a = 8. > When x + y + 1E-16, the code above returns a = 3. > > Why? ...

"A" is not equal "A"?
I was trying to convert String Array to String A through cycle and than compare the result with String B but eventhough results were the same it returned false. I'am working in BlueJ 3.1.0 Code is: public boolean Method () { String[] Example = {"a","b","c"}; String A = ""; String B = "abc" for (int i = 0; i<3 ; i++) { A = A + Example[i]; } if (A == B) { return true; } } never got true... I appreciate any suggestions how to solve this Den 08.04.2014 10:06, skrev 245dav@gmail.com:...

what does the "+" and the "-" mean?
I recently read what the "+" and the "-" signs mean for compact discs. Of course, a friend has just asked me and I now forget. I've searched all over the place with no results. Anyone know? TIA! .. -------------------------------------- Mike Richter, were you born with "Scam Artist" emblazoned on your face? -------------------------------------- roscoe james wrote: > > I recently read what the "+" and the "-" signs mean for compact discs. Of > course, a friend h...

Re: "out" and "in out"
"no reliable initial value" means, you cannot rely on the value, but it may have a value. This depends on the parameter passing mechanism, which is _not_ related to the parameter mode (contrary to what many people think). So the parameter mode is there (nearly) solely for the information of the reader. The parameter passing mechanism for all kinds of parameters is defined in the RM. There are parameters passed by copy (in and out), by reference; for some it is explicitly left undefined. In your case, the passing mechanism is by reference, so you get what you get. But don't rely on this, rely only on the mode, i.e. the parameter st is undefined upon entering the procedure modify, so when you only write component 2, upon return, only component 2 has been written. Under slight variations, the result of your code might be <garbage character>U<garbage character>. Another thing: Don't rely upon s1'First = 1. Component 2 might not exist. You could call modify like so: X: String (25..30); modify (X); Now s1(2) inevitably will raise Constraint_Error. ____________________________________________________ Aufnehmen, abschicken, nah sein - So einfach ist WEB.DE Video-Mail: http://freemail.web.de/?mc=021200 "Christoph Karl Walter Grein" <AdaMagica@web.de> wrote: > > In your case, the passing mechanism is by reference, so you get what you get. But don't rely on this, rely only on the mode, i.e. the parameter st is undefined...

how to change "/" to "\"
iam new to shell scripting and i have plz can anyone help in changing the pattrern "/" to "\" using the sed command. olympie@gmail.com wrote: > iam new to shell scripting and i have plz can anyone help in changing > the pattrern "/" to "\" using the sed command. sed 's/\//\\/g' will replace all '/' with '\' srp -- http://saju.net.in Saju Pillai <saju.pillai@gmail.com> wrote: >> iam new to shell scripting and i have plz can anyone help in changing >> the pattrern "/" to "\" using ...

"plot", "imshow" and "quiver"
Hi all. So recently I made the discovery that when use "imshow" command, the YDir parameter under Axis Properties is set to "reverse" by default. To me this seems counter intuitive. Why wouldn't YDir be "normal" by default? When set at "normal" it turns out that my image is actually flipped upside down. On the contrary, when use "quiver" command to plot a vector field, the YDir is set at "normal" by default. Even though this makes more sense to me, because "reversed" YDir is the correct way to display an image (as in "imshow"), the result of "quiver" is that the vector fields this time depict the objects as if they are upside down... So every time I use "quiver" I always add the following line to revert the objects back to its normal orientation... set(gca, 'YDir', 'reverse')... In addition, "plot" uses "normal" setting for YDir. The only issue I have is that I use these commands fairly frequently in my job and sometimes they can get a little bit confusing in terms of display. So I wonder why MATLAB hasn't standardized them so that the objects always get displayed the same way. It's just a comment I have. Thank you. "Clare " <flyingclare@gmail.com> wrote in message news:hefvdk$3md$1@fred.mathworks.com... > Hi all. So recently I made the discovery that when use "imshow" command, > the ...

Is there any """Anti Stringizing operator #"""
Hi everybody:D I've a string that contains the name of a class. Some members told that I can use """Stringizing Operator (#)""", but the problem is here, that I have the string, & I want something vice- versa. As we know with """Stringizing Operator (#)""", we can get the stirng name of a class or ... str <--- #ClassA But I want to instantiate a class that I have just it's name as a string. ClassA * clsA = new ??? <--- Str ??? How can I do it? I don't want to use """HardCoding"&qu...

["a", "b", "c", "d"] to "a, b, c, d"?
I want to process each element of an array, but the last element should be handled special. Here is an example: def p_ary(ary) str = "" ary.each do |elem| str << elem << ", " end str.chomp!(", ") str end so p_ary(["a", "f", "x", "test"]) produces "a, f, x, test". The code works, but isn't there an easier and more general way for this behaviour? martinus On Tue, 06 Apr 2004 04:23:22 -0700, Martin wrote: > I want to process each element of an array, but the last ele...

if("0X0"=="000"){echo "boo";}
Hi ;) Everything is in the title. the prob is "boo" is displayed ! Can you believe it ? Thanx for anyone who can help me. fabrice. Fabrice R=E9gnier wrote: > Hi ;) > > Everything is in the title. the prob is "boo" is displayed ! Can you > believe it ? Thanx for anyone who can help me. > > fabrice. That's because they are equal! PHP interprets the string "0X0" as zero in Hexidecimal and that is equal to 0. What are you trying to accomplish? Ken Fabrice R?gnier <regnier.fab@free.fr> wrote: > Everything is in the title. the pr...

Problem with "Expect" ? "Telnet"? "TclApp"?
Hi, My script try to "Telnet" a machine with "Expect", and it is wrapped to EXE extension with "TclApp". DEP is turned off, and file dgbhelp.dll exists. And now, I run the script. It works well in some PC. However in others, it turns out that the commands in "Telnet" is not executed. I capture the packets, and find that the "username" is not promoted when the server ask for it. Then I try the tcl extension script, it is OK in every PC. I have no idea what's going on.It is the problem of "Expect", "Telnet", or "TclApp", or the OS of my PCs? zhoujingyu Regards, The problem troubles me so much. I am crying for you help. Can anyone give me some advice? Thank you very much! Regards, zhoujingyu At 2008-04-23 08:51PM, "1985zhoujingyu@163.com" wrote: > The problem troubles me so much. I am crying for you help. Can anyone > give me some advice? Thank you very much! Show us your Expect script. -- Glenn Jackman "If there is anything the nonconformist hates worse than a conformist, it's another nonconformist who doesn't conform to the prevailing standard of nonconformity." -- Bill Vaughan On 4=D4=C224=C8=D5, =CF=C2=CE=E79=CA=B124=B7=D6, Glenn Jackman <gle...@ncf.c= a> wrote: > > Show us your Expect script. > > -- > Glenn Jackman > "If there is anything the nonconformist hates worse than a conformist, > it'...

Why "Let*" and not "Let" after "do" in a loop??? Grrr.
Here is a bit of code... (defun example () (let ((listlen (1- (length *text-array*)))) (loop for i from listlen downto 0 for j = (nth i *text-array*) ;position of first alpha character. do (let* .....insert bindings plus body of let* code here etc... So... Why does that last "let*" work while a "let" in the same place does not and throws an error about how the variables in the bindings following the let have no value? The following is the bit of code I was working on that brought up the issue... it is part of code that I am post...

Definition of "shall", "should", "must", etc.
Is there a written standard anywhere that defines specification terms like "shall" and "should" and "must"? I've run into a number of projects where, in particular, "shall" / "must" / "will" are all used interchangeably. Your thoughts... "C. J. Clegg" <reply.to.newsgroup@nospam.no> wrote in message news:jbsbh19g228ne84213f8kh0uvccj5ie6sg@4ax.com... > > Is there a written standard anywhere that defines specification terms > like "shall" and "should" and "must"? > > I've run into a number of projects where, in particular, "shall" / > "must" / "will" are all used interchangeably. > When in doubt, place an explicit statement that serves to indicate the interpretation that will be used (make certain it is not inconsistent with the customers rules and regulations) > Your thoughts... C. J. Clegg wrote: > Is there a written standard anywhere that defines specification terms > like "shall" and "should" and "must"? > > I've run into a number of projects where, in particular, "shall" / > "must" / "will" are all used interchangeably. > > Your thoughts... oh ...the beauty of google and having worked in telecomms where this knowledge is an (unfortunate) must (no pun intended) http://standards.ieee.org/guides/style/section...

what is the difference between "tsu", "su" and "sudo"?
Hi all I needed to ask a question about the Linux commands used for getting root access. The question is, what is the difference between "tsu", "su", and "sudo"? I am mainly interested about the "tsu" command regarding which there seems to be very little documentation. What is the benefit in using e.g. "tsu" rather than "su"? And are there other ones besides these 3? (If yes, any pointers to a website discussing all of them would be appreciated.) Thanks in advance, JJ <santa@temporaryinbox.com> writes: >Hi all >I needed to ask a question about the Linux commands used for getting >root access. >The question is, what is the difference between "tsu", "su", and >"sudo"? Never heard of tsu. Not on my system. >I am mainly interested about the "tsu" command regarding which there >seems to be very little documentation. So for something like securly logging in why in the world would you use something for which you can find no docs? You look up the barrel of guns to see if they are loaded while you pull the trigger as well? >What is the benefit in using e.g. "tsu" rather than "su"? For something like su, I would say there is no benefit. >And are there other ones besides these 3? (If yes, any pointers to a >website discussing all of them would be appreciated.) ???? W...

"Log out", "Shut down", and "Restart" inoperative?
> This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. --B_3174031899_112514 Content-type: text/plain; charset="ISO-8859-1" Content-transfer-encoding: 8bit (BTW, thanks to all for suggestions re. Network performance � it turned out there was some packet loss) Selecting log out, shut down, or restart from apple menu has no effect on G5 w/10.3.4 (with latest patches). Sleep does work, however. No �spinning ball� cursor or error message � just doesn�t work. This worked at first, t...

"token" "token sequence" "scalar variable" "vector" ??
Hi, can someone tell me what the following words mean as per C/clc: 1) token 2) token sequence 3) scalar variable 4) vector "G Fernandes" <ge.fernandes@gmail.com> wrote in message news:1108685930.401684.323430@c13g2000cwb.googlegroups.com... > Hi, can someone tell me what the following words mean as per C/clc: > > 1) token > Section A.1.1(of c99): keyword identifier constant string-literal punctuator > 2) token sequence Think any allowable combination of the above mentioned tokens. e.g., const volatile int *x; > > 3) scalar v...

Web resources about - "out" and "in out" - comp.lang.ada

Resources last updated: 3/23/2016 5:21:03 AM