えと、
let f = ...
と書いた場合は、f が ... の中で束縛されていないのに対し、
let rec f = ...
と書いた場合は、f が ... の中で束縛されていることに注目するのが
よろしいかと。
ML である以上、関数と変数を区別するということの方がピンと来ません。