Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 理解Haskell树有困难_List_Haskell_Tree - Fatal编程技术网

List 理解Haskell树有困难

List 理解Haskell树有困难,list,haskell,tree,List,Haskell,Tree,我在树方面遇到了一些问题,我试图制作一个简化的家谱(系谱树),从一个人开始,比如说鲍勃爷爷,我会尽我最大的努力画这个: BOB | / \ SIMON RUDY

我在树方面遇到了一些问题,我试图制作一个简化的家谱(系谱树),从一个人开始,比如说鲍勃爷爷,我会尽我最大的努力画这个:

                                        BOB
                                         |
                                     /        \
                                 SIMON         RUDY
                                /    \         /  \
                            ROBBIE  MARTHA  TOM   ISABEL
所以,鲍勃爷爷和奶奶生了两个孩子(这在这里不重要),西蒙和鲁迪,然后西蒙和鲁迪都生了两个孩子(同样只有一个父母重要),请注意,这不一定是我想做的树,但只是一个例子,你们可以用它来帮助我。我想把它作为一个数据族,然后有一个函数启动“根”,它将是爷爷Bob,然后有另一个函数,它将允许我将某人添加到树中,如AddSimon descending from Bob

到目前为止,这就是我所拥有的atm(我尝试了其他方法,并彻底改变了它):

现在,这根本不起作用,给了我一个解析错误:

t4.hs:9:10: parse error on input ‘=’
我试图修复这个问题,改变代码,寻找其他方法,也看到了其他帖子,但没有取得任何进展


我想我已经说得很清楚了,提前谢谢xD

如果有语法错误,可以用let和lambda在main中创建一个函数,然后使用它

data Family a = Root a [Family a] | Empty deriving (Show, Read)

main :: IO()
main = do
  let root  = (\a  -> Root a [Empty])
  print(root "Bob")
但您也可以在main之外定义函数并在后者调用它们:

root :: String -> Family String
root a = Root a [Empty]

main :: IO()
main = do
  print(root "Bob")

你忘了说
main
做什么了!例如,试试
main=do print(root“Bob”)
。从下到上以相反的方式构建树会容易得多。因为一旦创建了Bob的节点,就不能“修改”它,所以在不拆开整个树并重新组装它的情况下,就不能“添加”它的后代。相反,用两片叶子创建鲁迪的子树是很容易的,对西蒙来说也是如此,然后最终创建鲍勃作为这两片叶子的父树。另外,如果只是因为这是一本令人愉快的读物,请一定要检查一下。@amalloy你是什么意思?比如,首先添加最底层的“子对象”?除此之外:
Root
不是数据构造函数的好名字。考虑<代码>节点>代码>或代码>分支>代码>等。如果你的例子中存在一个树(如果是“鲍伯”),树的根应该是单收敛点。root@Wireless啊,好吧,好吧,我不太明白,所以创建一个函数嘿,我的代码是这样的:
modulegeneaology其中数据族a=Node a[Family a]|空派生(Show,Read)root::String->Family String root a=Node a[Empty]main::IO()main=do print(root“Bob”)
它给了我以下输出:
Node“Bob”[Empty]
我如何让它只打印“Bob”?太棒了!因此,您最初的问题得到了回答,不要忘记投票并接受;)。现在,这是一个完全不同的问题,如果你问一个新问题更好。未来的读者显然也是如此。但是很简单,我可以给你一个提示,制作你自己的展示实例并定义展示方法。好的,投票前我只是澄清了所有疑问,我总是投票别担心xD谢谢你的帮助!我想这应该足够了,如果需要的话,我会问一个新问题:D
root :: String -> Family String
root a = Root a [Empty]

main :: IO()
main = do
  print(root "Bob")