You don't define variables to have dynamic scope. They automatically have dynamic scope when you evaluate them in the dynamic environment:
($vau () env
(eval 'x env))
The above, when called, will evaluate the variable 'x in whatever scope it was called in. Thus, the above $vau has just "made" the variable 'x dynamic. But of course this ability to evaluate things in the dynamic scope is only available to fexprs.
---
If you're talking about something similar to Racket's parameterize, you should be able to build that using dynamic-wind. Then something like this...
Warning: untested and may not work. However, if it does work then it will work for all variables, global or local, without declaring them as dynamic before-hand. So this will work:
($let ((x 5))
... x is 5 ...
($parameterize ((x 10))
... x is 10 in here ...
)
... x is 5 again ...
)
The catch is that in order to parameterize global variables, the $parameterize form itself needs to be at the top level, because it's mutating the immediate ancestor environment.
If you want to parameterize something other than the immediate environment, use $parameterize-redirect which accepts an environment as the first argument, and then evaluates in that environment instead.