Haskell插入数据结构

时间:2017-11-20 22:11:26

标签: haskell data-structures insert

我在我的数据结构中编码函数时遇到问题,该函数接收两个字符串(A和B)和一个结构(C)。

目的是创建一个新结构B并将其插入到结构A中,该结构属于或者是给定结构C.

所以,它应该寻找一个名为"在结构C中(如果有更多" A"它应该选择"最老的")然后,如果找到,则创建并添加新的结构B到结构"命名"答:如果没有找到它应该什么都不做。

data Structure = Structure String [Structure]  

instance Show Familia where
show (Familia a (xs)) = intercalate "\n" $ a : ["  " ++ show x | x <- xs]

insert :: String -> String -> Structure -> Structure  

我一直在编码:

newStrct :: String -> Structure
newStrct a = Structure a []

name :: Structure -> String
name (Structure a xs) = a

StrctList :: Structure -> [String]
StrctList (Structure a []) = []
StrctList (Structure a xs) = [nome x | x <- xs]

search :: String -> Structure -> Structure
search (Structure b xs) = case (elemIndex a (StrctList (Struture b xs))) of  
    Just n -> xs !! n
    Nothing -> Structure "Not found" []

addToStrct :: String -> Structure -> Structure
addToStrct a (Structure b xs) = Structure b ((newStrct a):xs)

insert :: String -> String -> Structure -> Structure
insert a b (Structure c xs) 
    | a == c = addToStrct b (Structure c xs)
    | search a (Structure c xs) /= newStrct "Not found" = addToStrct b (search a (Structure c xs))

问题如下:
让我们假设我有这个结构

J
  K
  L  

第一个问题是,当我想插入一个新的结构&#34; M&#34;到结构&#34; K&#34;,它输出这个

K
  M  

而不是这个

J
  K
    M
  L  

第二个是我不知道如何在我的主要结构中运行所有结构的所有列表以试图找到指定的结构。

有什么想法吗?我希望现在更清楚了。感谢

1 个答案:

答案 0 :(得分:1)

您的术语有点模糊,但您说要将一个结构“插入”另一个结构。在Haskell中,这是不可能的;你不能修改结构,只能创建新结构。在Haskell中执行此操作的方法是创建一个与前一个结构相同的新结构,但其中包含一个新项目。由于你的问题有点模糊,有点难以弄清楚这是否能解决你的问题,但我认为这是一个很好的起点。

addStructure :: Structure -> Structure -> Structure
addStructure (Structure str ls) struct = Structure str (struct:ls)

emptyStructure :: String -> Structure
emptyStructure str = Structure str []

insert :: String -> String -> Structure -> Structure
insert s1 s2 struct = addStructure struct $ addStructure (emptyStructure s1) $ emptyStructure s2