Eval in a function

Don't quote anything; don't use eval.

Use syntax objects (syntax->list and #‵(...)) and keep the identifiers so the scopes are intact. To see if two identifiers are "the same", like comparing +, *, etc., use free-identifier=?.