[erlang-questions] array search problem
Hugo Mills
hugo@REDACTED
Fri Jan 30 19:38:23 CET 2015
On Fri, Jan 30, 2015 at 07:34:42PM +0100, Roelof Wobben wrote:
> Hello,
>
> Im stuck again,
>
> I have now this :
>
> read(Key, []) ->
> {error, Instance};
This clause matches a list with no members as the second parameter
of the function.
> read(Key, [Key, _] )->
> Key;
>
> read(Key, [_, Tail] ) ->
> read(Key, Tail).
These last two clauses match a list with exactly two members as the
second parameter of the function.
> I see this output :
>
> 10> Db1 = db:new().
> []
> 11> Db2 = db:write(name,roelof,Db1).
> [{name,roelof}]
> 12> Db3 = db:read(name, Db2).
> ** exception error: no function clause matching
> db:read(name,[{name,roelof}]) (db.erl, line 14)
Here, you're passing a list with exactly one member (a 2-tuple) as
the second parameter of the function.
Hugo.
>
>
>
>
> Fred Hebert schreef op 30-1-2015 om 18:11:
> >Hi Roelof.
> >
> >I recognize these exercises from the Francesco Cesarini and Simon
> >Thompson book (published by O'Reilly).
> >
> >If you cannot work through these exercises, I strongly recommend you go
> >back to the chapter that precedes them and re-read it again until it
> >clicks, or possibly go back to a chapter you may have skipped.
> >
> >It will be a better use of your time to go through it and understand it
> >properly rather than come to the mailing list and ask people in here to
> >do that part on your behalf.
> >
> >That being said, the trick for this exercise is to go through recursion.
> >
> >The database you mention uses *lists* (*arrays* are a different data
> >type and have a module to that name, too). Lists are a data structure
> >defined recursively:
> >
> > [3, 2, 1]
> > [3 | [2, 1]]
> > [3 | [2 | [1]]]
> > [3 | [2 | [1|[]]]]
> >
> >Those 4 lists are equivalent. So when you traverse a list by going
> >[Head | Tail], on each of these, you take one element and then are left
> >with the rest.
> >
> >The definition is therefore [FirstElement | RestOfListWhichIsAlsoAList].
> >The last element of a list is necessarily [], the empty list.
> >
> >Recursive functions have two main kinds of clauses (I'm going with an
> >informal definition here): base cases, and the regular case. The base
> >case is whenever recursion cannot proceed further. The base case is when
> >you can proceed further.
> >
> >To search elements in a list, your base case will therefore be '[]', the
> >empty list, where you can't search further.
> >The base case will be the other [Element | Rest].
> >
> >So your function to search in a DB? To avoid giving you the answer, you
> >know that if you can't look further, you haven't found the element.
> >Therefore,
> >
> > lookup(Element, []) ->
> > {error, not_found};
> > lookup(Element, [??? | RestOfList]) ->
> > ???.
> >
> >Can you fill in the blanks? If not, go back a few chapters. There's no
> >shame in doing that and making sure you understand things right before
> >moving on to more difficult topics.
> >
> >Regards,
> >Fred.
> >
> >On 01/30, Roelof Wobben wrote:
> >>Hello,
> >>
> >>Im still struggeling to make the database exercise working.
> >>
> >>I have to implement a read method which outputs as this :
> >>
> >>5> db:read(francesco, Db2).
> >>{ok,london}
> >>6> Db3 = db:write(joern, stockholm, Db2).
> >>[{joern,stockholm},{lelle,stockholm},{francesco,london}]
> >>7> db:read(ola, Db3).
> >>{error,instance}
> >>
> >>To achieve this do I need to use a try catch or can I achieve this with
> >>only pattern matching.
> >>
> >>Roelof
> >>
> >>_______________________________________________
> >>erlang-questions mailing list
> >>erlang-questions@REDACTED
> >>http://erlang.org/mailman/listinfo/erlang-questions
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions
--
Hugo Mills | For months now, we have been making triumphant
hugo@REDACTED carfax.org.uk | retreats before a demoralised enemy who is advancing
http://carfax.org.uk/ | in utter disorder.
PGP: 65E74AC0 | Wasp
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20150130/d2656990/attachment.bin>
More information about the erlang-questions
mailing list