Send Beginners mailing list submissions to beginners@haskell.org To subscribe or unsubscribe via the World Wide Web, visit http://www.haskell.org/mailman/listinfo/beginners or, via email, send a message with subject or body 'help' to beginners-requ...@haskell.org
You can reach the person managing the list at beginners-ow...@haskell.org When replying, please edit your Subject line so it is more specific than "Re: Contents of Beginners digest..." Today's Topics: 1. Unique integers in a list (Ramesh Kumar) 2. Re: Unique integers in a list (Prasanna K Rao) 3. Unique integers in a list (AbdulSattar Mohammed) 4. Re: Unique integers in a list (Ramesh Kumar) ---------------------------------------------------------------------- Message: 1 Date: Tue, 27 Mar 2012 19:03:05 -0700 (PDT) From: Ramesh Kumar <rameshkumar.techdynam...@ymail.com> Subject: [Haskell-beginners] Unique integers in a list To: "Beginners@haskell.org" <Beginners@haskell.org> Message-ID: <1332900185.67486.yahoomail...@web120205.mail.ne1.yahoo.com> Content-Type: text/plain; charset="iso-8859-1" Hi, I've just started learning Haskell a couple of weeks ago using Simon Thompson's "Haskell: Craft of Functional Programming". There is an exercise in chapter 7 of the book which goes something like this: Define a function of the type:???? unique :: [Integer] -> [Integer] which if given a list of integers, should return a list of those integers which occur only once in the input list. Example: ?? unique [5,2,4,2,3,1,5,2] should result in [4,3,1] *** The questions assumes we know only of list comprehensions and recursion. I am guessing the solution must include something like this: unique :: [Integer] -> [Integer] unique xs = [ x | x <- xs, isSingle x ] My problem is in defining the function 'isSingle'. I would greatly appreciate any pointers on this. Many thanks. Ramesh -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://www.haskell.org/pipermail/beginners/attachments/20120327/09420334/attachment-0001.htm> ------------------------------ Message: 2 Date: Tue, 27 Mar 2012 22:40:52 -0700 (PDT) From: Prasanna K Rao <prasannak...@yahoo.com> Subject: Re: [Haskell-beginners] Unique integers in a list To: Ramesh Kumar <rameshkumar.techdynam...@ymail.com>, "Beginners@haskell.org" <Beginners@haskell.org> Message-ID: <1332913252.14871.yahoomail...@web44714.mail.sp1.yahoo.com> Content-Type: text/plain; charset="iso-8859-1" Hi, One way is to define a 'isin' function like this:: isin x (a:[]) ?= if (x == a) then True else False isin x (a:as) ?= if (x == a) then True else isin x as and use it like this:: unique (x:xs) ? = if not(isin x xs) then [x] ++ unique(xs) else unique(xs) or like this:: unique(x:xs) ? ?= [x | x <- (x:xs), not(isin x xs)] ++ unique xs The later being the preferred one. HTH.. Regards, ________________________________ From: Ramesh Kumar <rameshkumar.techdynam...@ymail.com> To: "Beginners@haskell.org" <Beginners@haskell.org> Sent: Wednesday, March 28, 2012 3:03 AM Subject: [Haskell-beginners] Unique integers in a list Hi, I've just started learning Haskell a couple of weeks ago using Simon Thompson's "Haskell: Craft of Functional Programming". There is an exercise in chapter 7 of the book which goes something like this: Define a function of the type:???? unique :: [Integer] -> [Integer] which if given a list of integers, should return a list of those integers which occur only once in the input list. Example: ?? unique [5,2,4,2,3,1,5,2] should result in [4,3,1] *** The questions assumes we know only of list comprehensions and recursion. I am guessing the solution must include something like this: unique :: [Integer] -> [Integer] unique xs = [ x | x <- xs, isSingle x ] My problem is in defining the function 'isSingle'. I would greatly appreciate any pointers on this. Many thanks. Ramesh _______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://www.haskell.org/pipermail/beginners/attachments/20120327/7358657b/attachment-0001.htm> ------------------------------ Message: 3 Date: Wed, 28 Mar 2012 12:00:49 +0530 From: AbdulSattar Mohammed <codingta...@gmail.com> Subject: [Haskell-beginners] Unique integers in a list To: beginners@haskell.org Message-ID: <ca+mxqh_cb80jsqspxebf-5tja2bfd1ofkhtzdir0au2tzhj...@mail.gmail.com> Content-Type: text/plain; charset="iso-8859-1" On Wed, Mar 28, 2012 at 11:10 AM, Prasanna K Rao <prasannak...@yahoo.com>wrote: > Hi, > > One way is to define a 'isin' function like this:: > > isin x (a:[]) = if (x == a) then True else False > isin x (a:as) = if (x == a) then True else isin x as > > Unnecessary. We have elem for that. > and use it like this:: > > unique (x:xs) = if not(isin x xs) then [x] ++ unique(xs) else unique(xs) > It removes duplicates. Does not remove the elements that have duplicates (which was asked by OP). It also needs the empty list check to terminate. It'll fail with Non-exhaustive patterns. > > or like this:: > > unique(x:xs) = [x | x <- (x:xs), not(isin x xs)] ++ unique xs > The not(isin x xs) will definitely fail for all the elements except the first one because those elements are being taken from xs. > > The later being the preferred one. HTH.. > > If you see correctly, the former is the preferred one (giving different solution). To OP, When we pass x to isSingle x xs, we know that there is at least one x in xs. If we remove that x and check for the existence of x in the remainder of the list, we know if there is more than one x. isSingle x xs = x `notElem` (delete x xs) delete is in Data.List. > Regards, > > > ------------------------------ > *From:* Ramesh Kumar <rameshkumar.techdynam...@ymail.com> > *To:* "Beginners@haskell.org" <Beginners@haskell.org> > *Sent:* Wednesday, March 28, 2012 3:03 AM > *Subject:* [Haskell-beginners] Unique integers in a list > > Hi, > > I've just started learning Haskell a couple of weeks ago using Simon > Thompson's "Haskell: Craft of Functional Programming". > There is an exercise in chapter 7 of the book which goes something like > this: > > Define a function of the type: unique :: [Integer] -> [Integer] > which if given a list of integers, should return a list of those integers > which occur only once in the input list. > Example: > unique [5,2,4,2,3,1,5,2] should result in [4,3,1] > > > *** The questions assumes we know only of list comprehensions and > recursion. > > I am guessing the solution must include something like this: > > unique :: [Integer] -> [Integer] > unique xs = [ x | x <- xs, isSingle x ] > > My problem is in defining the function 'isSingle'. > > I would greatly appreciate any pointers on this. > > Many thanks. > Ramesh > > > > _______________________________________________ > Beginners mailing list > Beginners@haskell.org > http://www.haskell.org/mailman/listinfo/beginners > > > > _______________________________________________ > Beginners mailing list > Beginners@haskell.org > http://www.haskell.org/mailman/listinfo/beginners > > -- Warm Regards, AbdulSattar Mohammed -- Warm Regards, AbdulSattar Mohammed -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://www.haskell.org/pipermail/beginners/attachments/20120328/b5269a40/attachment-0001.htm> ------------------------------ Message: 4 Date: Tue, 27 Mar 2012 23:53:49 -0700 (PDT) From: Ramesh Kumar <rameshkumar.techdynam...@ymail.com> Subject: Re: [Haskell-beginners] Unique integers in a list To: Prasanna K Rao <prasannak...@yahoo.com>, "Beginners@haskell.org" <Beginners@haskell.org> Message-ID: <1332917629.46554.yahoomail...@web120204.mail.ne1.yahoo.com> Content-Type: text/plain; charset="iso-8859-1" Thanks Prasanna. Is there a base case for the solution with recursion? I'm trying with this code but I'm not getting the actual desired result: isIn :: Integer -> [Integer] -> Bool isIn _ [] = False isIn n (x:xs) = if (n == x) then True else isIn n xs unique :: [Integer] -> [Integer] unique [] = [] unique (x:xs)?? = if not(isIn x xs) then [x] ++ unique(xs) else unique(xs) *Main> unique [1,2,3,4,5,4] [1,2,3,5,4]???????? *** should have been? [1,2,3,5] Thanks & Regards. >________________________________ > From: Prasanna K Rao <prasannak...@yahoo.com> >To: Ramesh Kumar <rameshkumar.techdynam...@ymail.com>; "Beginners@haskell.org" ><Beginners@haskell.org> >Sent: Wednesday, March 28, 2012 1:40 PM >Subject: Re: [Haskell-beginners] Unique integers in a list > > >Hi, > > >One way is to define a 'isin' function like this:: > > >isin x (a:[]) ?= if (x == a) then True else False >isin x (a:as) ?= if (x == a) then True else isin x as > > >and use it like this:: > > >unique (x:xs) ? = if not(isin x xs) then [x] ++ unique(xs) else unique(xs) > > > >or like this:: > > >unique(x:xs) ? ?= [x | x <- (x:xs), not(isin x xs)] ++ unique xs > > >The later being the preferred one. HTH.. > > >Regards, > > > > > > >________________________________ > From: Ramesh Kumar <rameshkumar.techdynam...@ymail.com> >To: "Beginners@haskell.org" <Beginners@haskell.org> >Sent: Wednesday, March 28, 2012 3:03 AM >Subject: [Haskell-beginners] Unique integers in a list > > >Hi, > > >I've just started learning Haskell a couple of weeks ago using Simon >Thompson's "Haskell: Craft of Functional Programming". >There is an exercise in chapter 7 of the book which goes something like this: > > >Define a function of the type:???? unique :: [Integer] -> [Integer] >which if given a list of integers, should return a list of those integers >which occur only once in the input list. >Example: >?? unique [5,2,4,2,3,1,5,2] should result in [4,3,1] > > > > >*** The questions assumes we know only of list comprehensions and recursion. > > > >I am guessing the solution must include something like this: > > >unique :: [Integer] -> [Integer] >unique xs = [ x | x <- xs, isSingle x ] > > >My problem is in defining the function 'isSingle'. > > >I would greatly appreciate any pointers on this. > > >Many thanks. >Ramesh > > > > > >_______________________________________________ >Beginners mailing list >Beginners@haskell.org >http://www.haskell.org/mailman/listinfo/beginners > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://www.haskell.org/pipermail/beginners/attachments/20120327/f146d6e1/attachment.htm> ------------------------------ _______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners End of Beginners Digest, Vol 45, Issue 34 *****************************************