Después de jugar con las capacidades simbólicas y numéricas de Mathematica, creo que también es un lenguaje de programación decente. Sin embargo, algo que lo hace menos atractivo como lenguaje de propósito general es la falta de tipo de datos de estructura tipo C (o el tipo de registro como se conoce en Pascal). ¿Cómo puedo evitar este problema?¿Tipo de datos de estructura en Mathematica?
Respuesta
Si entiendo bien su pregunta, simplemente puede escribir cosas como esta:
x[foo] = bar x[bar] = baz x[1] = 7 x[7] = 1 ?x
A continuación, para acceder a los datos para cualquier índice específico simplemente escriba la misma (por ejemplo, x[1]
volverá 7
, x[foo]
volverá bar
).
actualización: Mathematica 10 ha introducido Association
, que tiene muchas de las propiedades más importantes de un struct
. (Consulte new answer.) La versión original, un tanto obsoleta, de esta respuesta se encuentra a continuación.
Puede utilizar una reglaMathematica listas para imitar un tipo de datos struct C-similares. Por ejemplo,:.
person = {firstName -> "John", lastName -> "Doe"}
A continuación, puede acceder a los campos del registro mediante el operador /.
:
firstName /. person
produce John
.
lastName /. person
yields Doe
.
para actualizar un campo de un registro, anteponga el campo actualizado a la lista:
PrependTo[person , firstName -> "Jane"]
firstName /. person
produce entonces Jane
.
Consulte también la documentación Mathematica en transformation rules.
Hacer algunos cambios usando el anteponer significa que aparecerán varias reglas no utilizadas en la lista de personas. No muy eficiente. –
Tenga en cuenta que Mathematica 10 ha introducido ['Association'] (http://reference.wolfram.com/language/ref/Association.html), que tiene muchas de las propiedades más importantes de una' struct'. Ver [nueva respuesta] (http://stackoverflow.com/a/33465106/330202). –
De esta manera se puede trabajar:
x[foo] = bar
x[bar] = baz
x[1] = 7
x[7] = 1
x[c] = {{1,2,3},{4,5,6}}
y también para cambiar los elementos de un campo de lista que puedas Así que lo siguiente:
x[c] = ReplacePart[x[c], {1, 1} -> 8]
que devuelve:
x[c] = {{8,2,3},{4,5,6}}
Mathematica 10 ha introducido Association
, que tiene muchas de las propiedades más importantes de struct
.
someData = <| "name" -> "Bob", "age" -> 23 |>
In[1]:= someData["name"]
Out[1]= Bob
In[2]:= someData["age"]
Out[2]= 23
In[3]:= someData[[2]]
Out[3]= 23
Para obtener más información, consulte
Association
DataSet
(que se basa enAssociation
) guía- Wolfram: Elementary introduction to DataSets y Fast introduction for programmers.
- preguntas Mathematica.SE: How to make use of Associations y Struct equivalent in Mathematica?
- This HackerNews comment.
- 1. ¿Estructura el tipo de datos en php?
- 2. ¿Hay una estructura HashTable en Wolfram Mathematica?
- 3. Estructura de datos en evolución
- 4. ¿jQuery tiene una estructura de datos mutable de tipo hashtable?
- 5. Estructura de datos detrás del tipo de diccionario T9
- 6. Utilizando bases de datos MySQL en Mathematica
- 7. Importar datos de txt a Mathematica
- 8. cómo generar una imagen de este tipo en Mathematica
- 9. tamaño fijo matriz de tipo Estructura
- 10. ¿Cómo mostrar la estructura de datos planos en una estructura de datos jerárquica (Java)?
- 11. Explique la diferencia entre una estructura * de datos * y una * tipo de datos *
- 12. Un rompecabezas en la estructura de datos
- 13. Manera de manejar archivos de datos grandes en Wolfram Mathematica
- 14. Exportación, adición/anexión de datos y texto en archivos (Mathematica)
- 15. Estructura de datos para datos espaciales
- 16. Clase vs estructura de datos
- 17. RESTful estructura de datos patrones
- 18. ¿Qué estructura de datos usar?
- 19. Estructura de datos utilizada para la estructura de directorios?
- 20. C - Cómo implementar Establecer estructura de datos?
- 21. serialización de la estructura de datos Clojure
- 22. Java pregunta estructura de datos
- 23. java.util.Stack estructura de datos adecuada?
- 24. Rendimiento en la estructura de datos recursiva
- 25. Estructura de datos para niveles en juegos
- 26. estructura de datos Diccionario en I
- 27. Estructura de datos con indexOf rápido?
- 28. Estructura de datos para un mundo aleatorio
- 29. ¿PHP tiene una estructura de datos establecida?
- 30. Diseño de estructura de datos Thread-Safe
Esta forma de hacer las cosas tiene una ventaja real sobre el enfoque de reglas sugerido por sakra: te permite mutar los "campos" de la "estructura" de una manera directa. – Pillsy
Hay un problema con su respuesta: si un "campo" es una lista, sus elementos no se pueden cambiar individualmente. Por ejemplo, x [foo] = {1,2}; x [foo] [[1]] = 3 (* intentando cambiar el elemento de lista *) dará como resultado un error, porque x [foo] no es un valorL. Por lo tanto, aún no reemplaza completamente la funcionalidad C struct. – felix
Debe reemplazar completamente el valor anterior, no solo cambiar un solo valor de la lista: f ["foo"] = {1, 2}; f ["foo"] = (ReplacePart [f ["foo"], 1 -> 3]) Además, utilizaría cadenas o enteros para las claves, no para los símbolos. También puede hacer algunas cosas complicadas configurando UpValues for Set. –