Can we construct a function Iceberg,
which maps a given expression X to Iceberg[X]
satisfying 1. and 2. and 3. ?
1. From Iceberg[X],
it is not possible to inspect/extract a part of X with usual method.
It would be better if there is no part of Iceberg[X].
Applying Iceberg to X is like putting X into an iceberg.
ex) It is not difficult to extract 3rd part of {101,102,103,104,105},
from Hold[{101,102,103,104,105}].
In[1] Hold[{101,102,103,104,105}][[1]][[3]]
Out[1] 103
So Hold is not like Iceberg.
Likewise, for HoldComplete, Unevaluate, Defer, Inactivate, ... and combinations of these commands, similar method can extract any part of X.
So they are not like Iceberg.
2. From Iceberg[X], there is a unique way to comeback to X.
In[2] Icemelt[Iceberg[{101,102,103,104,105}]]
Out[2] {101,102,103,104,105}
No function other than 'Icemelt', can do it.
3. In fact there is a function satisfying 1. and 2. :
Iceberg = ToString
Icemelt = ToExpression
But I ask you to find another solution.
I believe ToString/ToExpression is the only solution.
Encrypt
/Decrypt
. $\endgroup$Compress
/Uncompress
? $\endgroup$myObj[]
function does whatIceberg[]
is supposed to, and we can defineIcemelt[myObj[data_]] := data
to get #2. $\endgroup$