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.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,fc050a66c3b5d87d X-Google-Attributes: gid103376,public X-Google-Thread: 1094ba,86e8c626be2471ae X-Google-Attributes: gid1094ba,public From: Paul van Delst Subject: Re: F9X twister & ADA (was: n-dim'l vectors) Date: 2000/04/07 Message-ID: <38EE44A3.AC8244AC@ncep.noaa.gov>#1/1 X-Deja-AN: 608134859 Content-Transfer-Encoding: 7bit References: <8cctts$ujr$1@nnrp1.deja.com> <38EA0440.1ECBC158@ncep.noaa.gov> <38ED4ECA.ADB698C9@sdynamix.com> X-Accept-Language: en Content-Type: text/plain; charset=us-ascii Organization: NOAA/NWS/NCEP/EMC Mime-Version: 1.0 Newsgroups: comp.lang.fortran,comp.lang.ada Date: 2000-04-07T00:00:00+00:00 List-Id: bv wrote: > > Paul van Delst wrote: > > > > nsavvinv2@my-deja.com wrote: > > > Can a function return an n-dimensional vector? > > > > Sure - in f90 at least....dunno about f77. I got it to work for vectors > > by using INTERFACE blocks in the code that calls the function, e.g. > > > > FUNCTION my_func ( x, y ) RESULT ( z ) > > > > IMPLICIT NONE > > INTEGER, INTENT( IN ), DIMENSION( : ) :: x, y > > INTEGER, DIMENSION( SIZE( x ) ) :: z > > > > z(:) = x(:) + y(:) ! Assumes x and y are the same size > > > > RETURN > > > > END FUNCTION my_func > > > > and then in the calling program: > > > > PROGRAM blah > > > > IMPLICIT NONE > > > > INTERFACE > > ! Interface body for my_func > > FUNCTION my_func ( x, y ) RESULT ( z ) > > IMPLICIT NONE > > INTEGER, INTENT( IN ), DIMENSION( : ) :: x, y > > INTEGER, DIMENSION( SIZE( x ) ) :: z > > END FUNCTION my_func > > END INTERFACE > > > > INTEGER, DIMENSION( 5 ) :: x = (/ -1, 1, -1, 1, -1 /), & > > y = (/ 1, -1, 1, -1, 1 /) > > > > WRITE( *, '( 5i5 )' ) my_func( x, y ) > > > > END PROGRAM blah > > What a slaughter of Fortran, If you're basing this opinion on the code snippet I wrote above - I defer to your expertise. I don't claim to be a Fortran 'spert or even a programmer for that matter. (But everyone must aspire to something, right?) As Dr. Maine pointed out in his reply, this is not the only way to write the code (I wish you hadn't been as vitriolic as you were in your response coz I would have liked to have seen his example - I get my tips where I can, ya know.) > showing every symptom of design by ignorant > and incompetent committee. What happened, where they too busy with > themselves to bother and learn from ADA?? If they did, they'd see > something along these lines: > > function normalize(v: in vector) return vector is > vni: float; > begin > vni := 1./norm(v) > return (v(x)*vni, v(y)*vni, v(z)*vni); > end normalize; > > -- somewhere in your code > u,v: vector; > . > . > . > u := normalize(v); > > The difference speaks for itself!! Wow. You're right. I can understand my code. :o) Sorry for sucking up the bandwidth with this reply, but, jeez, it's fridy! Strawberry margeritas all round....my shout. cheers and avagoodweegend, paulv -- Paul van Delst Ph: (301) 763-8000 x7274 CIMSS @ NOAA/NCEP Fax: (301) 763-8545 Rm.202, 5200 Auth Rd. Email: pvandelst@ncep.noaa.gov Camp Springs MD 20746