haskell - типы - функции - деревья

Для практики haskell я хочу реализовать игру, в которой студенты/ученики должны в игровой форме выучить алгебру.

В качестве базового типа данных я хочу использовать дерево:

  • с узлами, которые имеют метки и алгебраические операторы.
  • с листьями, которые имеют метки и переменные (типа String) или числа

Теперь я хочу определить что-то вроде

data Tree = Leaf {l :: Label, val :: Expression}
          | Node {l :: Label, f :: Fun, lBranch :: Tree, rBranch :: Tree}

data Fun = "one of [(+),(*),(-),(/),(^)]"

-- type Fun = Int -> Int 

будет работать

Следующее, о чем я думаю, это сделать "эквивалентность" деревьев - так как умножение/прибавление коммутативно и можно упростить сложение до умножения и т.д. всю кучу алгебраических операций. Мне также нужно искать по дереву - по метке, как мне кажется, лучше всего, хороший ли это подход.

Есть идеи, какие метки/фразы искать и как решить "data Fun".

9
задан Brian Tompsett - 汤莱恩 28 November 2015 в 14:37
поделиться