ar_list takes a list of values of any type(s) and returns an array. The values can be strings, numbers, refs, or arrays; any mix of these is fine too.
It sounds like you are talking about a StringMap rather than an Array with integer indices. There is an ar_Map which is similar to ar_List; look it up if you think it might be useful, but it's not necessary for this.
If you want to use an array to store your marks, you might consider doing something like this to reduce brain-hurtiness:
scn FnCreateMark; function parametersstring nameref cellfloat xfloat yfloat z; local variablesarray_var markbegin Function { name, cell, x, y, z }  ; fill out the info for this mark  let mark := ar_construct StringMap  let mark->name = name  let mark->cell = cell  let mark->x = x  let mark->y = y    ; send the new mark back to the calling script  SetFunctionValue markendscn MarkManagerScriptarray_var marks...if (you didn't initialize the array yet)  let marks := ar_construct Stringmapendif...if (you want to create a new mark and you've gotten the player to enter a name for it)  let marks[markName] := Call FnCreateMark markName, player.getParentCell, player.getPos x, player.GetPos y, player.getPos zendif
marks is a StringMap instead of an Array because I made the assumption you want to have a unique name for each mark. If that's not the case then you can use an Array instead, and each time you create a new mark you append it to your Array.
To use a mark you might have something like (just an example for showing the syntax):
; assume the player has entered the name of the mark he wants to return to, or you've gotten it from elsewherearray_var markstring_var markNamelet mark := marks[markName]print "Do you want to travel to position (" + $mark->x + ", " + $mark->y + ", " + $mark->z + ") in " + getName mark->cell + "?"arr->key is shorthand for accessing an element of a stringmap. It is equivalent to:
arr["key"]