Printf works like C printf, but is type checked. The error message looks like this: the needed type is vararg, the actual type is ... . Not perfectly informative, but vararg helps pointing out it's an error involving the format string.
There is a difference between '(x1, x2, ..., xn) and @(x1, x2, ..., xn) tuples.
To use rational module, add the lines:
staload "rational.sats" dynload "rational.dats"
to your code, and pass rational.dats, rational.sats, and your source code file to atscc.
Implemented print_rat, sub_rat_rat, and mul_rat_rat in rational.dats (see attachment).
To compile the code, make sure you pass both rational.dats and rational.sats to the command line to atscc.