Of course we know
Defer[Range[20]]
Range[20]
But I try to compress my expression into a string
com = Compress;
SetAttributes[com, HoldAllComplete]
string = com[Range[10]]
1:eJxTTMoPSuNiYGAoZgESPpnFJZ6MQIYhmDQCk8Zg0gRMmoJJMzBpDiYtwKSlJxNIlwEApm8I6w==
I cannot get a unevaluted expression from it?
Defer /@ Uncompress[string]
{1,2,3,4,5,6,7,8,9,10}
Actually the Range[20]
is the expected output.How to do this?
Answer
You need to wrap the expression Unevaluated
before passing it to Compress
, which means defining your own function instead of just assigning Compress
to com
:
ClearAll[com];
SetAttributes[com, HoldAllComplete];
com[expr_] := Compress[Unevaluated[expr]];
string = com[Range[10]]
(* "1:eJxTTMoPSmNkYGAoZgUSQYl56amZXEAWADzBBIQ=" *)
And then make sure to wrap it in Hold
or Defer
when you pull it back out, which you can do with the second argument of Uncompress
:
Uncompress[string, Defer]
(* Range[10] *)
Comments
Post a Comment