def pileOnto(self, a, b):
        """
        Pile a onto b

        Where a and b are block numbers, moves the pile of blocks consisting of 
        block a, and any blocks that are stacked above block a, onto block b. 
        All blocks on top of block b are moved to their initial positions prior 
        to the pile taking place. The blocks stacked above block a retain their
        order when moved.
        """
        a, b = self._getBlocks(a, b)
        if not a: return # Ignore bad indexes
        # Remove the blocks on top of block b
        b.removeBlocksFromAbove()
        # Remove all the blocks on top of a and including onto b's stack
        blocksToMove = [a] + a.above
        for bl in blocksToMove:
            bl.moveTo(b.position)
        # All the below code would have reversed the order of the blocks
        ##blocks = a.stack[a.stack.index(a):]
        ##while blocks:
        ##    blocks.pop().moveTo(b.position)
        # Shorter loop for python 2.3
        ## [bl.moveTo(b.position) for bl in blocks[::-1]]
        # Or for python 2.4
        ## [bl.moveTo(b.position) for bl in reversed(blocks)]
        # Or even this, but not very readable:
        ##for block in a.stack[:a.stack.index(a):-1]:
        ##    block.moveTo(b.position)

        Pile a onto b

        Where a and b are block numbers, moves the pile of blocks consisting of 
        block a, and any blocks that are stacked above block a, onto block b. 
        All blocks on top of block b are moved to their initial positions prior 
        to the pile taking place. The blocks stacked above block a retain their
        order when moved.
        
recipes/Python/361168_Vpython_example/recipe-361168.py