2011-05-11 11 views
7

Estoy buscando una lista completa de objetos atómicos en Mathematica (para los cuales AtomQ rinde True).¿Qué objetos son atómicos en Mathematica?

que sé sobre

Symbol 
String 
Integer 
Real 
Rational 
Complex 

SparseArray 
BooleanFunction 
Graph 

¿Hay alguna otra?

ref: http://reference.wolfram.com/mathematica/tutorial/BasicObjects.html

EDIT: continuamente añadiendo nuevos símbolos de respuestas a la lista anterior.

+4

estoy seguro de que los desarrolladores tenían sus razones para agregar más objetos atómicos a la lista (que permanecieron fijos durante mucho tiempo), tal vez como una mejor integración del componente s, eficiencia, etc., pero si esto representa una nueva tendencia de desarrollo, me preocuparía, ya que mantener la cantidad de objetos elementales y atómicos pequeños parece (para mí de todos modos) ser un ingrediente esencial para el verdadero poder y la consistencia de un lenguaje de programación. –

+3

¿Por qué alguien votó negativamente por esto? –

+0

Ahora que estás "de vuelta en la ciudad", ¿has visto mi respuesta? –

Respuesta

5

aparece la lista de las necesidades de un objeto más para ser completa:

In[520]:= f = BooleanFunction[30, 3]; 

In[521]:= AtomQ[f] 

Out[521]= True 
+2

Tengo curiosidad por saber si hay alguna forma programática para obtener esta lista (posiblemente basada en algunas funciones internas de nivel superior indocumentadas), con solo la funcionalidad de nivel superior (disponible para el usuario final). –

+0

@Leonid, también tengo curiosidad, y también intenté hacer eso. No es trivial, compare p. 'AtomQ @ SparseArray []' con 'AtomQ @ SparseArray [{1-> 1}]' – Szabolcs

+0

@Szabolcs Creo que puedo explicar al menos lo que observaste. Para cabezas atómicas no triviales como 'Rational',' Complex', 'SparseArray' (aquellas que parecen tener elementos y no ser atómicas, la forma en que se representan), se realiza la autoevaluación. Por ejemplo, 'AtomQ [No evaluado [Racional [1, 2]]]' da 'False'. Esta autoevaluación es normalmente invisible, pero puede rastrearla con 'On []'. No ocurre cuando se proporciona un número o tipo de argumentos incorrectos, como en 'Rational [{1}, {2}]'. Supongo que 'AtomQ' (así como algunas otras funciones) está sobrecargado internamente en estos formularios autoevaluados. –

1

parece que tenemos otro:

obj = Graphics`Mesh`Delaunay @ RandomReal[1, {10, 2}] 

AtomQ[obj] 
"MeshObject[1]"[2, {10, 21, 12}] 

True 
+0

Lo siento, olvidé revisar mis respuestas en SO (las revisé en Mma.SE). ¿Sigues usando v7? En v8 esto no parece ser atómico. ¿Tuviste que hacer alguna otra inicialización para hacer que esta función fuera utilizable más que ['' Graphics'Mesh'MeshInit [] ''] (http://mathematica.stackexchange.com/a/13596/12)? – Szabolcs

+0

@Szabolcs sigue en v7, y no, ejecutar solo el código anterior es suficiente para producir el resultado dado. –

+0

Debe ser una diferencia entre v7 y v8 a continuación. Es un poco sorprendente ya que espero que pasen de expresiones compuestas a representaciones atómicas optimizadas, y no a la inversa. – Szabolcs

Cuestiones relacionadas