>> Your print-n-times doesn't return an action...
Nope, look again. It returns the results of applying `void'. Who knows what (void) may return in a loosely-typed language?
>> ...it's an imperative function that performs an action.
Well, considering Scheme is an imperative language with side-effects, it's hard to dodge such criticism.
>> The naive translations to Scheme would be as follows...
That's not a translation from Haskell to Scheme, that's writing Haskell using a prefix syntax.
>> Also, both your examples rely heavily on non-strict evaluation. 'and' and 'or' are both macros that non-strictly evaluate expressions.
I went back and re-read your original post:
>> ...you'll note that the translation, strictly evaluated, gives infinite recursion.
Mea culpa--I completely missed your point that translating from a turing complete language to a non-turing complete language might have some pitfalls.