root() -- executes all arguments. returns the eval of the last symbol store() -- stores a pointer to the first argument under the name specified by the eval of the second argument, within the local scope update() -- same as store(), but tries to overwrite the value of an already stored key - if the current scope doesn't contain the key, checks upwards. if no scope contains the key, update() does nothing eq() -- returns 1 if the eval of all the arguments is the same, 0 if different. accepts any number of arguments if() -- if the eval of the first argument is 1, executes all the other arguments not() -- if the eval of the first argument is 1, returns 0, and vice versa sum() -- returns the sum of the eval of all the arguments print() -- prints the eval of the first argument to the console, and a newline character