[Haskell-cafe] how to make this work recursive ?
Sumit Sahrawat, Maths & Computing, IIT (BHU)
sumit.sahrawat.apm13 at iitbhu.ac.in
Sat Feb 28 15:08:03 UTC 2015
You're missing an argument to insert, assuming that it is indeed there,
consider this:
insert msg tree = tree'
where tree' = undefined
-- Take a LogMessage (msg) and a MessageTree (tree)
-- and return a new MessageTree (tree')
Therefore, the result of insert in your case, i.e. "MessageTree Leaf"
should be of type MessageTree.
And thus, we get
MessageTree Leaf :: MessageTree
-- Takes a (Leaf :: LogMessage) and produces a MessageTree
which implies,
MessageTree :: LogMessage -> MessageTree
-- A Data constructor
Obviously no such data constructor exists. A data constructor of this type
would exist only if you wrote something like:
data MessageTree = MessageTree LogMessage
| ...
which would not make sense.
On 28 February 2015 at 19:09, Roelof Wobben <r.wobben at home.nl> wrote:
> I tried this :
>
> insert :: LogMessage -> MessageTree -> MessageTree
> insert s =
> case words s of
> (_:_: "This is not the right format") -> MessageTree Leaf
> _ -> MessageTree Node
> LogMessage Leaf
>
>
> But I see this errormessages which I do not understand :
>
>
> src/LogAnalysis.hs at 38:49-38:60
> Not in scope: data constructor
> MessageTree
> src/LogAnalysis.hs at 39:49-39:60
> Not in scope: data constructor
> MessageTree
>
>
>
> Mike Meyer schreef op 28-2-2015 om 12:17:
>
> On Sat, Feb 28, 2015 at 5:07 AM, Roelof Wobben <r.wobben at home.nl> wrote:
>
>>
>> That part I understand .
>>
>> it's more how I do it here :
>>
>> Lets say I have this :
>>
>> data MessageType = Info
>> | Warning
>> | Error Int
>> deriving (Show, Eq)
>>
>> type TimeStamp = Int
>>
>> data LogMessage = LogMessage MessageType TimeStamp String
>> | Unknown String
>> deriving (Show, Eq)
>>
>> data MessageTree = Leaf
>> | Node MessageTree LogMessage MessageTree
>> deriving (Show, Eq)
>>
>> Now I have to put all the LogMessages in a binary tree.
>> with this signature : insert :: LogMessage -> MessageTree -> MessageTree
>>
>> I think I need recursion here but I still not see how I can make the
>> clauses.
>> Normally you can say somethig like this [] -> 0 or 1 -> but here it
>> seems to be all seperate logMessages
>>
>
> Whether you need recursion or not depends on where you're to insert the
> message. For instance, you could turn them into a list with:
>
> insert message tree = Node tree message Leaf
>
> Try drawing a few pictures of what that produces, and you'll see why
> it's probably not what you want.
>
> You should be able to tell by looking at the MessageTree type that you
> have two cases: one where you're passed something matching a Node, and one
> where you're passed something that's just a Leaf. The latter can't be
> recursive, so it's going to terminate any recursion. Following the advice
> given to you for the Hanoi problem, try writing it first.
>
> Then all you have to do is figure out how to handle the case where
> you're given a Node instead of a Leaf. Figuring out where in the
> MessageTree you want to insert the Logmessage will probably be required to
> do that.
>
>
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
>
>
--
Regards
Sumit Sahrawat
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20150228/8577c1e1/attachment.html>
More information about the Haskell-Cafe
mailing list