Моя проблема: манипулирование символическими выражениями.
Символическое выражение строится, начиная с целочисленных констант и переменных, с помощью таких операторов, как +, -, *, /, min, max.Точнее, я бы представлял выражение следующим образом (код Caml):
type sym_expr_t =
| PlusInf
| MinusInf
| Const of int
| Var of var_t
| Add of sym_expr_t * sym_expr_t
| Sub of sym_expr_t * sym_expr_t
| Mul of sym_expr_t * sym_expr_t
| Div of sym_expr_t * sym_expr_t
| Min of sym_expr_t * sym_expr_t
| Max of sym_expr_t * sym_expr_t
Я представляю это для выполнения полезных и эффективных вычислений (например, a + b - a = 0 или a + 1> а) Мне нужно иметь какую-то нормальную форму и оперировать ею.Представленное выше представление, вероятно, не будет работать слишком хорошо.
Может кто-нибудь указать мне, как я должен подходить к этому?Мне не нужен код.Это можно легко написать, если я знаю, как.Ссылки на статьи, которые представляют представления для нормальных форм и / или алгоритмы для построения / упрощения / сравнения, также помогли бы.
Кроме того, если вы знаете о библиотеке Ocaml, которая делает это, сообщите мне.