visual usen una studio sentencias regulares raiz que predefinidas por parte palabras operandos operadores net matematicas longitud leer funciones funcion extraer expresiones evaluar evaluador ejemplos como caracteres caracter cadena buscar .net f#

.net - usen - Cómo se puede evaluar una expresión almacenada como una cadena en F#



string c# ejemplos (5)

Quiero hacer algo como esto:

dejar x = 5 dejar y = 10

let expr = Console.ReadLine ()

expr

Donde uno podría escribir "x + y" en la consola para almacenar en expr.

¿Cómo se puede evaluar una afirmación como esta en F #?

En última instancia, quiero que un usuario pueda ingresar expresiones, o un conjunto de reglas para un sistema, en una página web y guardarlas en una base de datos para aplicarlas en el momento adecuado en una biblioteca F #. Simplemente no sé cómo convertir la cadena ingresada a un valor de función en F #.

¡Gracias por cualquier ayuda que pueda brindar!

Adán


F # no tiene eval, como se mencionó, pero si puede definir la gramática, puede utilizar las implementaciones Lex y Yacc en F # (fslex y fsyacc).

EDITAR:

Como seguimiento rápido, sé que en ocaml puede explotar la consola interactiva para sus usuarios con ocamlmktop . No estoy seguro de un equivalente en F #. Esto, sin embargo, no parece coincidir con lo que desea con una interfaz web (¿correcto?).


Acabo de ver a Joh usar evaluaciones de citas en su F # para la página de desarrollo de juegos

open Microsoft.FSharp.Linq.QuotationEvaluation ... let mk_gravity scale_func (up: ''Vec): ''Vec = let q = <@ let (*) = %scale_func in -9.81 * up @> q.Eval()

Alternativamente, si buscas una evaluación matemática simple, puedes descargar el analizador y el evaluador Expression de Edmonodo desde su codeplex plage - Diferenciación simbólica en C # / F #

Buena suerte - Jiří


F # no tiene una función eval como Lisp (AFAIK), si eso es lo que te estás preguntando. Sin embargo, podría construir un árbol de expresiones a partir de la entrada de cadenas.


No hay nada fuera de la caja para esto.

No estoy seguro de cuáles son sus necesidades, pero podría considerar el ejemplo de Dynamic LINQ. Tiene un pequeño analizador para generar árboles de expresión, que luego puedes compilar o manipular. ScottGu habla sobre esto aquí .

Si bien parece que se debe principalmente a la extensión de consultas LINQ, actúa como un buen analizador. Lo pirateamos para admitir enlaces do / let para un poco más de flexibilidad.


O puede ver mi código F # que implementa el evaluador de expresiones matemáticas.