[(Hello) 2 50 add]sets up an array
[(Hello) 52]where the -th element of the array is the string (Hello) and the -th element is the integer 52. The put and get operator store and fetch an element of an array. The get operator takes an array and an index from the stack and returned the object indexed by the second argument. The line
[(sm1) 12 [(is) (fun)] 15] 2 getwould return the array [(is) (fun)] on the stack. The put operator takes an array, an index i, an object from the stack and store the object at the -th position of the array. That is,
/a [(sm1) (is) (fun)] def a 2 (a stackmachine) putwould rewrite the contents of the variable a as
[(sm1) (is) (a stackmachine)]