Hi Christophe, > 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") -> "abc" : (set MyTransient (pack "!" (val '"MyTransient"))) -> "!MyTransient" : MyTransient -> "abc" : (val @) -> "!MyTransient" 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: > http://wiki.tcl.tk/795 You could 'catch' such errors (catch '("Undefined") ... ) 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», Nice! :) > 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. ♪♫ Alex -- UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe