2017-11-26 3 views
3

Zuerst möchte ich sagen, die Antwort ist nicht über etwas wie optional oder present.Wie definiert man eine Fortran-Subroutine mit einer beliebigen Anzahl von Argumenten?

Ich möchte eine Funktion definieren, die wie folgt aussieht write(*,*) .... Wie wir sehen, kann die Anzahl der Eingabevarianten beliebig sein. Wenn wir das Schlüsselwort optional verwenden, müssen wir alle möglichen Eingaben definieren. Angenommen, wir haben 1000 (mögliche) Eingaben, was können wir tun?

+1

IMHO - Mehr als ein oder zwei optionale Parameter führen zu schlechtem Design. Für uniforme Typparameter empfiehlt es sich, Arrays zu verwenden, auch wenn sie von der Fliege erstellt wurden, wie 'addnode ([1,2,3,4])' – ja72

Antwort

6

Sie können nichts mit einfachen Unterroutinen oder Fortran-Argumenten machen. Es ist einfach nicht möglich. Sie können nur Argumente verwenden, die in der Funktion definiert sind.

Sie müssen entweder alles in ein Array setzen, wenn die Typen aller Eingaben gleich sind, oder Sie müssen kompliziertere abgeleitete Typen erstellen - vielleicht eine polymorphe verkettete Liste oder ähnliches.

Beachten Sie, dass das, wonach Sie fragen, in einigen Sprachen existiert (z. B. C variadic-Funktionen), aber in Fortran nicht existiert.

+2

Nur hinzufügen - es gibt Dinge in der Fortran-Sprache, die nicht können durch Benutzerprozeduren repliziert werden. Näher zu dem, was Sie verlangen, können die MIN- und MAX-Funktionen eine beliebige Anzahl von Argumenten haben, jede mit Namen, aber es gibt keine Möglichkeit, etwas Ähnliches zu schreiben. –

Verwandte Themen