elixirの勉強中に思った疑問なのですが、マクロについて分からないことがあります。

変数atomsvaluesがあったとして、その2つを受け取って、そのatomsのアトムの名前でvaluesの値を束縛するマクロを書こうとしたのですが、うまく書くことができませんでした。

マクロで渡されたASTが変数の場合、その変数の値にアクセスして、その値に応じたASTを返すことはできるのでしょうか?

具体的には

atoms = [:a, :b, :c]
values = ["one", "two", "three"]
assign(atoms, values)
IO.puts a #=> one
IO.puts b #=> two
IO.puts c #=> three

というコードがうまく動くようなassignマクロは作れるのでしょうか?

[:a, :b, :c][1, 2, 3]を直接マクロに渡せばマクロにはリテラルがそのまま渡されるのでそれを使えるのですが、atomsという変数を渡した場合atomsという変数を表すASTが渡されてリストの中身にアクセスできない気がします。

ちなみにあくまでただの疑問なのでどうしてもこのマクロを実装したいわけではなく、可能かどうか、可能であればどのような方法になるのかが知りたいです。