>>758 あたり
関数型言語らしくいきましょうか

let make_list s e =
let rec loop lst n =
if n > e then
lst
else
loop (n::lst) (n+1)
in
List.rev (loop [] s);;

って末尾再帰の最適化してくれるよね(?)