Also, wenn ich Sie richtig verstehe, müssen Sie verschachtelte Schleifen machen (und in der Regel möchte man verschachtelte Schleifen halten ein Minimum).
Aber zur Kompilierzeit wissen Sie nicht einmal, wie viele Nester Sie tun müssen.
Wenn ich dieses Problem hätte, würde ich wahrscheinlich die Nester in eine einzelne Schleife auspacken und die verschiedenen Indizes von Grund auf neu berechnen. Hier ist ein Beispiel, das ich gerade ausprobiert habe:
program nested
implicit none
integer :: num_nests, i
integer, dimension(:), allocatable :: nest_limits
integer, dimension(:), allocatable :: nests
print *, "Please enter number of nests:"
read(*, *) num_nests
allocate(nest_limits(num_nests))
allocate(nests(num_nests))
print *, "Please enter nest limits:"
read(*, *) nest_limits
nests(:) = 1
outer_loop : do
print *, nests(:)
i = 1
! Calculate the next indices:
inner_loop : do
nests(i) = nests(i) + 1
! If this is still a valid index, exit the inner
! loop and go for the next iteration
if (nests(i) <= nest_limits(i)) exit inner_loop
! The index has overflown, so reset it to 1 and
! move to next index.
nests(i) = 1
i = i + 1
! If the next index would be outside of num_nests,
! the whole loop is finished.
if (i > num_nests) exit outer_loop
end do inner_loop
end do outer_loop
end program nested
Ich musste das einmal tun, als eine sehr einfache und schlechte Lösung für ein bestimmtes Problem (in C). Kurz gesagt, hatte ich, soweit ich mich erinnere, ein Wrapper-Skript, das die Datei mit den erforderlichen verschachtelten Schleifen schrieb und dann das Projekt kompilierte und ausführte, das es verwendete. Es hat tatsächlich funktioniert. – zdim
Dies lädt eher die Frage ein * Warum willst du das tun? * Wenn du dich zum Beispiel SO umschaust, wirst du Fragen haben, wie man Nöhlen in beliebiger Tiefe macht, auf die die Antwort lautet: * Benutze ein * 'elemental '* Funktion *. Für andere ist ein rekursiver Ansatz angemessen. Also, warum willst du das machen? –
Ich möchte dazu einen Tensor beliebigen Ranges transformieren und trotzdem einen Code haben, der physikalisch "transparent" aussieht. – lenzinho