0xd34df00d 25.11.2011 10:48 Azoth

Запилил базовую нормализацию деревьев выражений в виде протаскивания нод по ассоциативным и коммутативным операциям, когда это возможно. Выглядит мило:
normalizeTree (NBin f1 (LC lc) (NBin f2 (LC rc) t)) | f1 == f2 && (assoc $ binFInf f1) = normalizeTree $ NBin f1 (LC $ binaryOps f1 lc rc) (normalizeTree t)

Без этой строки:
*Main> applyP' (pretty . normalizeTree) "3+5*x*2+2"
Right "(2.0+(3.0+(2.0*(5.0*x))))"
С ней:
*Main> applyP' (pretty . normalizeTree) "3+5*x*2+2"
Right "(5.0+(10.0*x))"

Уняняэ.

Do you really want to delete ?