| Particularly interesting to me: Embedded recursion is much harder than tail recursion. This reminds me of the difficulty of central embedding vs tail embedding in linguistics. Level 3: tail recursion program (:SIDE = 80)
TO SHAPEB :SIDE
IF :SIDE = 20 STOP
REPEAT 4 [FORWARD :SIDE RIGHT 90]
RIGHT 90 FORWARD :SIDE LEFT 90
SHAPEB :SIDE/2
END
Level 4: embedded recursion program (:SIDE = 80)
TO SHAPEC :SIDE
IF :SIDE = 10 STOP
SHAPEC :SIDE/2
REPEAT 4 [FORWARD :SIDE RIGHT 90]
RIGHT 90 FORWARD :SIDE LEFT 90
END > Mental model of embedded recursion as looping - The children were fundamentally misled by thinking of recursion as looping. While this mental model is adequate for active tail recursion, it will not do for embedded recursion. > programming constructs often do not allow mapping between meanings of natural language terms and programming language uses of those terms. Neither STOP or END stop or end, but pass control back. The reason that this is important for the Logo novice is that when their mental model of recursion as looping fails, they have no way of inferring from the syntax of recursion in Logo how flow of control does work. So they keep their inadequate looping theory, based on their successful experience with it for tail recursion, or blame discrepancies between their predictions and the program's outcomes on mysterious entities such as numbers, or the "demon" inside the language itself. > Beyond mistaken mental models about recursion, we have found these to involve atomistic thinking about how programs work, assigning intentionality and negotiability of meaning as in the case of human conversations to lines of programming code, and application of natural language semantics to programming commands. |
The part that is missing is the stack. So I wonder what would happen if you let them step through while showing the stack state at every point. This would clue them in immediately that there is nested control flow.
The part about alternative explanations is funny but just reflects the fact that there is an element of the language not reflected in the code, that they can't just reify visually (unlike the instruction counter).
That is, the kid who inferred that there was an invisible "demon"... was right.