8

I have a list {a1, a2, ...... , an}, in which all as have been initialized to a number. I want to get:

 {Unevaluated[a1], Unevaluated[a2], ...... , Unevaluated[an]}

Is there a simple way to achieve this using Map, without getting a list of Unevaluated[value of ai]?

MarcoB
  • 67,153
  • 18
  • 91
  • 189
Yituo
  • 1,389
  • 9
  • 15

4 Answers4

10
unevaluatedF = Function[{x}, Unevaluated@x, {HoldFirst, Listable}];

{a1, a2, a3} = {1, 2, 3};
unevaluatedF@{a1, a2, a3}

{Unevaluated[a1], Unevaluated[a2], Unevaluated[a3]}

kglr
  • 394,356
  • 18
  • 477
  • 896
7

you can try also:

{a1, a2, a3} = {1, 2, 3};
Unevaluated /@ Unevaluated@{a1, a2, a3}

(*{Unevaluated[a1], Unevaluated[a2], Unevaluated[a3]}*)
Basheer Algohi
  • 19,917
  • 1
  • 31
  • 78
3

First a link to a presentation everyone should read:

Now some additional methods:

List @@ Unevaluated /@ Hold[a1, a2, a3]

Unevaluated /@ Unevaluated @ {a1, a2, a3}

More contrived:

Unevaluated @@@ Thread @ Hold[{a1, a2, a3}]

{Unevaluated /@ Hold[a1, a2, a3]} // ReleaseHold

Delete[{Unevaluated /@ Hold[a1, a2, a3]}, {1, 0}]
Mr.Wizard
  • 271,378
  • 34
  • 587
  • 1,371
0

Is this what you're seeking?

Unevaluated /@ {a1, a2, a3, a4}

(*

{Unevaluated[a1], Unevaluated[a2], Unevaluated[a3], Unevaluated[a4]}

*)

David G. Stork
  • 41,180
  • 3
  • 34
  • 96
  • 1
    Not really, a1, a2, a3 are all initialized, so if a1 = 10, I will get Unevaluated[10], which could not be used in Set – Yituo May 22 '15 at 16:29