> Is it possible to shortcut the value resolution of transient
> symbols with a custom function? Something like:
I'm not sure I understand the question.
The value of symbols (not only transients) is the CDR of the cell
representing the symbol. The evaluator of the interpreter fetches this
value, i.e. a single pointer-indirection.
> (de shortcut_transient (name)
> (pack name "!"))
> This would add a "!" to the default value of a transient sym.
So something like
(set MyTransient (pack "!" (val '"MyTransient")))
would do? Full example:
: (setq MyTransient "abc")
: (set MyTransient (pack "!" (val '"MyTransient")))
: (val @)
Or, for a more general usage, you might consider using methods on
objects to achieve a more configurable, flexible behavior.
> BTW I had a related question (maybe for many months!):
> Is there a PicoLisp function/mechanism like «unknown» in Tcl:
You could 'catch' such errors
but this is not completely the same.
A built-in handler for undefined functions exists, but only if the
symbol name contains a colon, e.g. 'lib:foo', then the interpreter looks
for a shared library 'lib' and there for a symbol 'foo'.
> Some context for the reason I need this kind of transient
> manipulation (for the curious and because maybe I'm trying
> to solve the wrong problem):
> I'm embedding a language in Picolisp. I managed to build
> Blockly blocks for this language:
> http://microalg.info/ide.html (click on «Commandes»,
> For this I need to produce XML from Lisp code. This is quite
> easy considering that the data is not data but some source code.
> The trick is to reprogram my language so that each command
> will output some XML recursively (thanks to Lisp!!!).
> And more generally (and this is the problem I post about), I need
> "any transient sym" to dynamically have the value (based on its name):
Hmm, so is this the same as the localization does in PicoLisp? Transient
symbols representing strings in the application are kept in a global
structure '*Uni', and are assigned a new value (i.e. the translation in
the target language) by the 'locale' function.
> I note that this transient thing is VERY powerful. Alex, could you
> provide us with some historical hindsight about transient syms? Do
> they exist in other languages? Are they your brainchildren?
Transient symbols are just normal symbols, except that they have a
file-local scope, and happen to look lexically like strings in other
languages. That's all.