There's a call to param inside param's body. Isn't it the same fn? Ah, it's just the tag macro's private language.
between with a string == substring between delimiters.
between without a string == pick a random number in a range.
Is that right? It's not just about exclusive/inclusive, that's pretty different semantics.
I meant that the return value of the string version doesn't include the delimiters (between "ab" "ef" "abcdef"), while when something like (between 3 7) is called, the return value could also be 3 or 7.
Maybe it would make more sense to modify rand so that it could return numbers in a range if given 2 arguments.