You dim letter$(), but you put the letters into an array called mon$() and never read them out again.
You gosub to _start: but never return, I don't know if that makes any difference. Plus, you are gosubbing to the next line, which isn't needed.
You appear to be trying to store the output of the function into the letter() array, but you aren't returning anything from the function. To return something from a function, put the value you want to return after endfunction. E.g. endfunction rnd(7) would return a random number. (what dr doomer said.)
You didn't dim the letter() array to start with.
You'll want to print the value in mon$() which relates to the number returned from the function ran_num(). To do this you put ran_num() as the index number in the mon$() array, e.g. print mon$(ran_num()). Or store the number separately so you can reference it several times, letter#=ran_num() then print str$(letter#).
You need to end the program above the functions and subroutines, otherwise your program might run over into them if you don't end it properly.
My guess at some corrected code:
dim letter$(10)
letter$(1)="a"
letter$(2)="b"
letter$(3)="c"
letter$(4)="d"
letter$(5)="e"
letter$(6)="f"
letter$(7)="g"
randomize timer()
rem Begin
_Start:
letter=ran_num()
print str$(letter)
print letter$(letter)
suspend for key
end
function ran_num()
ran_no=int(rnd(6))+1
endfunction ran_no