list - 无法理解 Haskell 树

标签 list haskell tree

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

                                        BOB
                                         |
                                     /        \
                                 SIMON         RUDY
                                /    \         /  \
                            ROBBIE  MARTHA  TOM   ISABEL

所以,鲍勃爷爷和奶奶(这里不重要)、西蒙和鲁迪有 2 个 child ,然后西蒙和鲁迪各有 2 个 child (再次只有 1 个 parent 重要),请注意,这不一定是树我只想做一个例子,大家可以用它来帮助我。我想将它作为一个数据家族,然后有一个函数来启动“根”,即鲍勃爷爷,然后有另一个函数可以让我将某人添加到树中,就像添加从鲍勃下来的西蒙一样。 p>

到目前为止,这就是我在自动柜员机上拥有的(我尝试过其他东西并全部更改):

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

    main :: IO()
    main = do
    root :: String -> Family
    root a = ((Root a) [Empty])

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

t4.hs:9:10: parse error on input ‘=’

我尝试修复此问题并更改代码以寻找其他方法,也看到了其他帖子,但没有取得任何进展...

我想我已经说清楚了,先谢谢xD

最佳答案

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

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")

关于list - 无法理解 Haskell 树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47357604/

相关文章:

Pythonic 循环列表

Haskell:使用 IO() 值过滤字典/散列/映射

haskell - Hayoo/Hoogle 不匹配单态/少多态签名与多态签名

haskell - 是否有更严格的Data.Sequence?

javascript - 在 Canvas 中绘制二叉树时节点重叠

c - 递归树遍历

jQuery 将类添加到嵌套列表中的所有最后一个子级

r - For 循环并应用在 R 中的嵌套列表上进行数学计算(从 Bchron 查找校准年龄的平均值)

c++ - 标准 : container c++ move to front

java - 如何在 Java 中将文件路径列表转换为 JSON 对象