[Haskell-cafe] begginers' questions
Daniel Fischer
daniel.is.fischer at web.de
Fri Jan 29 16:57:14 EST 2010
Am Freitag 29 Januar 2010 22:38:11 schrieb Han Joosten:
> knyttr wrote:
<snip>
> fun x [] [] = ...
> fun x y [] = ...
> fun x y z = ...
> would make more sence.
>
> however, there still is overlap. (ghc could generate a warning for
> this)
>
> now the where part: there are several options:
>
> fun x y z
>
> | z == [] = ...
> | y == [] = ...
> | otherwise = ...
>
> where
> ...
Better use
fun x y z
| null z = ...
| null y = ...
| otherwise = ....
where
....
>
> or using a case expression...
>
> fun x y z = case (x,y,z) of
> (_ , _ , []) -> ...
> (_ , [] , [_:_]) -> ...
> (_ , [_:_], [_:_]) -> ...
> where
> ...
> pattern matches do not overlap this way. you could use this pattern
> matches also in the previous solution.
>
> Then your second question:
> > 2. how can I change a field in a list in the most easy way? the only
> > solution I found is below. I am not very happy with it - it does too
> > many operations just to change one field.
> >
> > changeIn array index value = (take (index-1) array)++[value]++(drop
> > index array)
>
> Remember, in haskell you do not 'change' values in variables. Thers is
> no such thing as a variable. You probably want a function that takes a
> list, an index and a value. It produces a list with all elements from
> the first list, only the n-th element is replaced with the given value.
> I would specify this as follows:
>
> f x:xs i v
>
> | i == 1 = v:xs
> | i > 1 = x : (f xs (i-1) v)
>
> but there are probably dozens of other ways to do this. While you are
> new to Haskell, do not worry too much about performance.
True, but also
*** be aware that lists are NOT arrays ***
trying to use them as such is sure to land you in a deep hole of horrible
performance sooner or later.
If what you need is an array, use arrays (immutable or mutable, depending
on the problem at hand). If you need a set, use sets (Data.Set e.g.), if a
list is appropriate for what you want to do, use the versatile [].
> (ghc will surly
> surprise you =^D) The main thing is to think functions. If you do that,
> you will appreciate Haskell for sure.
More information about the Haskell-Cafe
mailing list