Random832 <random...@fastmail.com>: > The box metaphor as I understand it involves a lot of boxes, which may > contain arrows (call them pointers, references, or whatever) emerging > from them pointing to other boxes, which are all free-floating with no > implication that any of them are fixed locations or are not > dynamically allocated.
When I first studied Java, I quickly made a realization that Java's . (dot) is C's -> (arrow) That's all there was to it. You could replace Java with Python. Where a C programmer would write: x->y->z a Python programmer would express the same as: x.y.z > The most classic use of it, after all, is for Lisp, in which two boxes > glued together represent a cons cell, something absolutely nobody > would accuse of having a fixed location. Google "lisp box diagram" for > any number of examples. There doesn't seem to be any way to introduce Lisp/Java/Python's data model except through lower-level programming concepts. > On Sun, Jun 5, 2016, at 04:01, Marko Rauhamaa wrote: > M> You could also think of variables as pegs, references as leashes, > M> and objects as cute puppies. One puppy could be held with multiple > M> leashes hung on separate pegs. Some puppies hold leashes in their > M> mouths. Every leash is tied to a puppy or a special wooden post > M> called None. > > (I disagreed with him on "None" needing to be a special wooden post for > the analogy to work) That's not an analogy -- that's an abstract data model! Note: no boxes! However, there are strings attached. Now you can truly *bind* objects to variables. Seriously, though, it is notable that the high-level programming languages pretty unanimously refuse to make variables first-class objects. I wonder why. Python (et al) can closely emulate pointers to variables with arrays: >>> def double_it(it): ... it[0] *= 2 ... >>> it = [7] >>> double_it(it) >>> it[0] 14 >>> double_it(it) >>> it[0] 28 although that would be bad style in Python, which can return tuples. Marko -- https://mail.python.org/mailman/listinfo/python-list