No puedo usar print_endline
porque requiere una cadena, y no creo que tenga ninguna forma de convertir mis muy simples tipos de datos definidos por el usuario en cadenas. ¿Cómo puedo verificar los valores de las variables de estos tipos de datos?¿Hay alguna forma de imprimir tipos de datos definidos por el usuario en ocaml?
Respuesta
En muchos casos, no es difícil escribir su propia rutina de conversión string_of_. Esa es una alternativa simple que no requiere bibliotecas adicionales ni extensiones OCaml no estándar. Para los cursos que enseño que usan OCaml, este es a menudo el mecanismo más simple para los estudiantes.
(Sería bueno si había apoyo para una conversión genérica para cuerdas sin embargo;. Quizás el material derivado OCaml se darán cuenta)
No hay nada en el idioma base que haga esto por usted. Hay un proyecto llamado OCaml Derivación (llamado así por una característica de Haskell) que puede derivar automáticamente funciones de impresión de declaraciones de tipo. No lo he usado, pero suena excelente.
http://code.google.com/p/deriving/
Una vez que tenga una función de impresión de su tipo (derivado o no), se puede instalar en el nivel superior ocaml. Esto puede ser útil, ya que la impresión integrada de alto nivel a veces no hace lo que usted desea. Para hacer esto, use la directiva #install-printer
, descrita en Chapter 9 of the OCaml Manual.
Hay funciones de biblioteca de terceros como dump
en OCaml Batteries Included o OCaml Extlib, que convertirán genéricamente cualquier valor en una cadena utilizando toda la información de tiempo de ejecución que pueda obtener. Pero esto no podrá recuperar toda la información; por ejemplo, los nombres de los constructores se pierden y se convierten solo en números enteros, por lo que no se verán exactamente como usted desea. Básicamente, tendrá que escribir sus propias funciones de conversión o utilizar alguna herramienta que las escriba por usted.
A lo largo de las líneas de las respuestas anteriores, ppx_sexp es un PPX para la generación de impresoras de tipo de definiciones. Aquí hay un ejemplo de cómo usarlo mientras usa jbuilder como su sistema de compilación, y usa Base y Stdio como su stdlib.
En primer lugar, el archivo jbuild que especifica cómo hacer la construcción:
(jbuild_version 1)
(executables
((names (w))
(libraries (base stdio))
(preprocess (pps (ppx_jane ppx_driver.runner)))
))
Y aquí está el código.
open Base
open Stdio
type t = { a: int; b: float * float }
[@@deriving sexp]
let() =
let x = { a = 3; b = (4.5,5.6) } in
[%sexp (x : t)] |> Sexp.to_string_hum |> print_endline
Y cuando lo ejecuta a obtener este resultado:
((a 3) (b (4.5 5.6)))
convertidores S-expresión están presentes en toda la base y todas las bibliotecas relacionadas (Stdio, Core_kernel, Core, asíncrono, incremental, etc.), por lo que puede contar con la posibilidad de serializar cualquier estructura de datos que encuentre allí, así como cualquier cosa que defina por su cuenta.
- 1. ¿Hay alguna manera de efectuar tipos de datos definidos por el usuario en MySQL?
- 2. base de datos “tipos" definidos por el usuario en pgAdmin
- 3. ¿Soporta MySQL tipos de datos definidos por el usuario
- 4. static_cast para tipos definidos por el usuario
- 5. Tipos de datos UML definidos por el usuario en Visio 2010
- 6. ¿Cómo enumero los tipos definidos por el usuario en una base de datos de SQL Server?
- 7. ¿Qué tan geniales son los tipos de datos definidos por el usuario en SQL Server?
- 8. El permiso EXECUTE se deniega en los tipos de tabla definidos por el usuario?
- 9. ¿Hay alguna forma de imprimir la acción SEL?
- 10. OCaml para JVM. ¿Hay alguna?
- 11. ¿Cómo decide Ocaml la precedencia para los operadores definidos por el usuario?
- 12. elemento de azar por pesos definidos por el usuario
- 13. RVO para los tipos definidos por el usuario complejas en C++
- 14. extendiéndose Convert.ChangeType para producir tipos definidos por el usuario a petición
- 15. ¿Hay alguna manera de almacenar de forma segura los datos de usuario en un dispositivo Android?
- 16. haskell: ¿hay alguna forma de generar instancias "derivadas" para tipos de datos aproximadamente tuple-isomórficos?
- 17. ¿Hay alguna forma de imprimir el tipo de variable/puntero en C?
- 18. ¿Hay alguna forma de mostrar una definición de tipo enumerada postgresql definida por el usuario?
- 19. OCaml Imprimir las declaraciones
- 20. Tipos recursivos en OCaml?
- 21. ¿Cómo se diferencia la eliminación entre los tipos de datos incorporados y los definidos por el usuario?
- 22. OCaml equivalentes tipos
- 23. ¿Cómo crearía y almacenaría campos personalizados definidos por el usuario en una base de datos SQL?
- 24. ¿Hay alguna forma de pasar el iPhone?
- 25. OCaml tipos con diferentes niveles de especificidad
- 26. Tipos anónimos - ¿Hay alguna característica de distinción?
- 27. ¿Hay alguna forma de imprimir el seguimiento de pila a pedido?
- 28. OCaml firmas de tipos explícitas
- 29. Coincidencia de patrón OCaml en tipos integrados
- 30. ¿Por qué Enumerable.Cast no utiliza moldes definidos por el usuario?
http://stackoverflow.com/questions/7442449/ocaml-polymorphic-print-and-type-losing – ygrek
http://stackoverflow.com/questions/7380755/ocaml-get-values-type-name – ygrek