Hello Neil! Hello Malcolm! Hello Van!
It took me quite a while to respond. Sorry for that.
On Tue, 2012-10-09 at 20:03 -0600, Neil Carlson wrote:
> If you're going to approach a statically-typed language (polymorphism
> aside) like Fortran with the expectations of a dynamically-typed
> language like python you're bound to be disappointed. You've got to
> take Fortran for what it is and design your solutions around its
> idioms. I've no doubt that the dynamic typing of python has its
> advantages, but it most certainly has its disadvantages.
It wasn't my intention to complain about Fortran, at all. I just wanted
to give you some idea why I am having such things in mind as a functions
whose return type isn't fixed but explicit.
On Wed, 2012-10-10 at 09:31 +0900, Malcolm Cohen wrote:
> Perhaps it is worth taking a step back and asking why it is that you want to
> architect your solution in that way. It might well be easier to take a slightly
> different approach to solving the "real" problem.
Sure! It is a pretty simple task. There is a binary file header I want
to parse. Words 1:70 are 32bit floats, words 71:105 are 32bit ints,
106:110 are 32bit booleans and so on ...
Reading the Header using stream access works just perfect.
real(4) :: floats(1:70)
integer(4) :: ints(71:105)
...
read( unit ) floats
read( unit ) ints
...
So, I wanted to have a function which returns a real, integer or logical
accordingly to the word/position which is passed as an argument.
I was able to find a solution using a generic interface combined with a
auxiliary passed variable 'type'. The actual code's structure looks more
or less like that:
interface get_header
procedure get_header_real
procedure get_header_int
....
end interface
function get_header_real( word, type ) result( value )
real :: type, value
....
function get_header_int( word, type ) result( value )
integer :: type, value
....
I am not in favor for this solution but it works very well.
(I played around with the TRANSFER statement. However, doing so the code
becomes very hard to understand. )
All of your hints are pointing me into a direction understanding Fortran
in a better way. Just wanted to say that I am deeply grateful for all of
your help!
Cheers, Stefan
|