Ho svolto alcune ricerche sulla storia dei linguaggi di programmazione.
Ma prima, vediamo cosa dice Wikipedia su programmazione strutturata :
Structured programming is a programming paradigm aimed on improving the clarity, quality, and development time of a computer program by making extensive use of subroutines, block structures and for and while loops—in contrast to using simple tests and jumps such as the goto statement which could lead to "spaghetti code" which is both difficult to follow and to maintain.
E questo, naturalmente, include l'uso di funzioni ricorsive.
Da History of Lisp (scritto da McCarthy. Bold Enfasi mia):
As a programming language, LISP is characterized by the following ideas: ..., the recursive use of conditional expressions as a sufficient tool for building computable functions, ...
Towards the end of the initial period, it became clear that this
combination of ideas made an elegant mathematical system as well
as a practical programming language. Then mathematical neatness became
a goal and led to pruning some features from the core of the language.
This was partly motivated by esthetic reasons and partly by the
belief that it would be easier to devise techniques for proving
programs correct if the semantics were compact and without exceptions.
I invented conditional expressions in connection with a set of chess legal move routines I wrote in FORTRAN for the IBM 704 at M.I.T. during 1957-58. This program did not use list processing. The IF statement provided in FORTRAN 1 and FORTRAN 2 was very awkward to use, and it was natural to invent a function XIF(M,N1,N2) whose value was N1 or N2 according to whether the expression M was zero or not. The function shortened many programs and made them easier to understand, but it had to be used sparingly, because all three arguments had to be evaluated before XIF was entered, since XIF was called as an ordinary FORTRAN function though written in machine language. This led to the invention of the true conditional expression which evaluates only one of N1 and N2 according to whether M is true or false and to a desire for a programming language that would allow its use.
A paper defining conditional expressions and proposing their use in Algol was sent to the Communications of the ACM but was arbitrarily demoted to a letter to the editor, because it was very short.
Da The Advent of Recursion & Logica in Informatica :
Since FORTRAN did not contain recursion either, he(McCarthy) tried to add it to the language, but without success.
In August 1959, McCarthy wrote a letter in which he openly advocated for recursive procedures [80], and, in January 1960, at the final ALGOL60 Paris conference, McCarthy suggested to add recursive procedures to the ALGOL60 language [116, p.30].
Perlis even stated in 1978 with respect to the ALGOL Effort that:
"The implications of recursion were not really understood, except by McCarthy." [91, p.160]
Per riassumere, non solo aveva pensato che le funzioni ricorsive e le espressioni condizionali fossero sufficienti per costruire funzioni computabili, ma credevano anche che avrebbero portato a un codice leggibile e facile da verificare, e diffuso l'idea in altre lingue.
Pertanto, anche se McCarthy non ha detto goto è dannoso, penso che sia il primo a percepire l'importanza della programmazione strutturata e Lisp è la prima lingua che può essere definita linguaggio di programmazione strutturata. ( Fortran I non ha nemmeno supportato le subroutine o le espressioni nidificate e aveva solo un aritmetico se istruzione)