【发布时间】:2014-04-30 21:39:06
【问题描述】:
我正在做一个项目并且遇到了一些困难,因为我不习惯 Haskell,而且它对我来说是一种很难编码的语言。
我想要一棵有叶子和树枝的树,叶子只能作为整数输入,比如 1,2,3。 分支将仅为 operation1 和 operation2 的字符。
这些操作从叶子中获取输入并进行计算并将输出发送到其他分支并再次进行计算,直到它到达顶部。
到目前为止我的代码:
data Tree = Leaf Float | Branch Char Tree Tree deriving (Show,Eq,Ord)
insertElement x (Leaf y) = Leaf y
insertElement x (Branch a left right) = Branch a (insertElement x left) right
doIt (x:xs) (y:ys) = insertElement ((Branch y (Leaf x) (Leaf (head xs))))
op1 num1 num2 = 1+num1+num2*2
op2 num1 num2 = 1-num1*num2*2
树将被递归创建,我尝试使用 foldr 来执行此操作但没有工作,因为它不是二叉树。
任何帮助都会很好。
【问题讨论】:
-
我也不能为递归编写多个语句 :) 我猜它是一个haskell 的事情......
-
如果您使用 Hlint 并对您的函数进行类型注释,那就太好了;这有助于编译器和我们推理您的代码
-
如果你的函数有合理的名字也会有很大帮助——比如 insertChar/insertElement,但是 doIt 什么也没说
-
您的问题陈述很难理解。我认为您想为由数字常量和两个操作(op1,op2)组成的简单表达式语言表示句法树。您的
doIt函数旨在评估表示的表达式。不过,我仍然看不到insertElement的用途。 -
@AtikBayraktar 我回滚了您的编辑,以便可以看到您的代码。这将帮助遇到此问题的其他人寻找类似问题的解决方案。保留完整问题被认为是礼貌的做法,但您可以在原始问题的文本下方随意添加其他编辑。
标签: function haskell recursion tree