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. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe