У меня есть небольшая проблема с пониманием того, как выполнить следующие действия в Haskell:
Допустим, у меня есть утверждение, подобное этому:
- a * (b + c)
- a + (b * c)
- a + (b * (c + d))
- a * (b + (c * d))
- и т.д..и т. д.
Я хочу выразить эти операторы в дереве и оценить результат каждого, для начала я определил следующую структуру данных:
data statement = Number Int
| Product statement statement
| Sum statement statement
deriving (Eq, Show)
Для примера Tree toДля работы я использовал следующую функцию:
a :: statement
a = Product (Number 2) (Sum (Number 5) (Number 1))
Теперь я хочу построить функцию treeResult, которая дает мне определенный результат моего оператора, но я не знаю, как решить эту проблему.Целое число, возвращаемое для вышеприведенного оператора, должно быть 12.
Моим первым предположением было написать функцию, которая принимает «оператор» в качестве параметра и возвращает int только для начинающих с простыми операторами.
treeResult :: statement -> Int
treeResult (Number a) = a
treeResult (Product (Number a) (Number b)) = a*b
treeResult (Sum (Number a) (Number b)) = a+b
Теперь я знаю, что мне нужно что-то, что работает рекурсивно, но я не знаю, как написать это на haskell, может кто-нибудь помочь мне здесь, пожалуйста?