Я довольно новичок в Haskell, и у меня все еще есть некоторые проблемы с функциональным программированием. При этом сказал:
У меня есть собственный тип данных n-арного дерева
data Tree = Empty | Leaf String | Node String [Tree]
Я пытаюсь написать функцию для замены элемента в дереве, т.е.
replaceInTree :: String -> String -> Tree -> Maybe Tree
Замена первой строки на вторую. Каждая строка встречается только один раз, поэтому я могу придерживаться первого найденного. Я приложил несколько усилий, но не могу понять, как восстановить полное дерево после замены элемента. Тривиально, у меня есть это:
ntreeReplace x y (Node z lis)
|(x==z) = Just (Node y lis)
который, очевидно, меняет только голову node
. Я написал функцию, которая возвращает true, если элемент присутствует в дереве, как leaf
или node
, но продвижение дальше этого оказалось затруднительным.
Спасибо за любую помощь!