2011-12-29 9 views
6

(Mathematica versione: 8.0.4)Sull'utilizzo di Internal`Bag e qualsiasi documentazione ufficiale?

lst = Names["Internal`*"]; 
Length[lst] 
Pick[lst, StringMatchQ[lst, "*Bag*"]] 

293  
{"Internal`Bag", "Internal`BagLength", "Internal`BagPart", "Internal`StuffBag"} 

La guida Mathematica per la programmazione di Michael Trott, pagina 494 dice sul contesto interno

"Ma simili al contesto di Experimental, non esiste alcuna garanzia che il comportamento e la sintassi delle funzioni siano ancora disponibili nelle versioni successive di Mathematica "

Inoltre, ecco un accenno Bag funzioni:

Implementing a Quadtree in Mathematica

Ma dal momento che ho visto il numero di esperti Mathematica qui suggerire Internal`Bag funzioni e usarli se stessi, io parto dal presupposto che sarebbe sorta di sicuro usarli nel codice attuale? e se sì, ho la seguente domanda:

Dove posso trovare una descrizione più ufficiale di queste funzioni (l'API, ecc.) come si trova nel centro di documentazione? Non c'è nulla ora su di loro ora

??Internal`Bag 
Internal`Bag 
Attributes[Internal`Bag]={Protected} 

Se devo iniziare a utilizzarle, trovo difficile per conoscere nuove funzioni da solo guardando alcuni esempi e tentativi ed errori per vedere cosa fanno. Mi chiedo se qualcuno qui potrebbe avere un documento più completo e autonomo sull'uso di questi, descrivere l'API e qualcosa di più di ciò che è già là fuori o un link a tale luogo.

+9

?? La descrizione ufficiale * è * il cosiddetto "Centro di documentazione" (aka Help). Se non c'è nulla lì, allora non c'è altro luogo strutturato. È già successo: FrontEnd Tokens è stato introdotto su Mathematica 3, ma solo (parzialmente) documentato molto più tardi. Quindi, aspetta solo un decennio circa e WRI probabilmente lo documenterà. Fino ad allora devi affidarti a gentili sviluppatori come Dan Lichtblau et. al. per far luce nell'oscurità. –

+3

Mi sono reso colpevole di raccomandare funzioni non documentate senza presentare il caveat del loro uso.È difficile non entusiasmarsi per l'ultimo "trucco" che imparo e iniziare a usarlo subito, ma potrebbe non essere saggio, e non dovrei incoraggiare gli altri a seguire questa pratica. Purtroppo, una serie di caratteristiche e funzioni interessanti rientrano in questa categoria. Spero che ci sarà presto una parola ufficiale su funzioni come "Bag *". –

+9

Dubito che ci sarà qualcosa di ufficiale su questi. Ma sono in giro da almeno una dozzina d'anni e non se ne vanno. –

risposta

0

Il contesto Internal è esattamente ciò che dice il nome: destinato all'uso interno da parte degli sviluppatori Wolfram.

Ciò significa, tra l'altro, le seguenti cose sussistono tutto quello che si potrebbe trovare in là:

  • Molto probabilmente non sarà in grado di trovare alcuna documentazione ufficiale su di esso, in quanto non è destinata ad essere usato dal pubblico
  • Non è necessariamente così valido sugli argomenti non validi. (Il crash del kernel può facilmente verificarsi su alcuni di essi.)
  • L'API può cambiare senza preavviso.
  • La funzione potrebbe scomparire completamente senza preavviso.

Ora, in pratica, alcuni di essi potrebbero essere ragionevolmente stabili, ma ti consiglio vivamente di allontanarti da loro. L'utilizzo di API non documentate può facilmente lasciarti dentro per un sacco di dolore e una brutta sorpresa in futuro.