
I need help with this haskell functionWrite a function productLastPart which, only using library functions, returns the product of thelast n numbers in the list, where n is the first argument to the function. productLastPart :: Int -> [Int] -> Int

On Wed, Oct 16, 2019 at 09:09:40PM +0000, instanct95@aol.com wrote:
I need help with this haskell functionWrite a function productLastPart which, only using library functions, returns the product of thelast n numbers in the list, where n is the first argument to the function. productLastPart :: Int -> [Int] -> Int
It would probably help you learn if you made an attempt to solve it yourself first. If you post what you have so far, I’d be happy to take a look. Regards, Seph -- Seph Shewell Brockway, BSc MSc (Glas.) Pronouns: she/her

Hi,
this is my solution:
productLastPart :: Int -> [Int] -> Int
productLastPart n xs = product (take n (reverse xs))
It only uses functions product, take and reverse
Regards,
Ut
http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail
Mail
priva di virus. www.avg.com
http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail
<#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
Il giorno ven 18 ott 2019 alle ore 18:16 Seph Shewell Brockway
On Wed, Oct 16, 2019 at 09:09:40PM +0000, instanct95@aol.com wrote:
I need help with this haskell functionWrite a function productLastPart which, only using library functions, returns the product of thelast n numbers in the list, where n is the first argument to the function. productLastPart :: Int -> [Int] -> Int
It would probably help you learn if you made an attempt to solve it yourself first. If you post what you have so far, I’d be happy to take a look.
Regards,
Seph
-- Seph Shewell Brockway, BSc MSc (Glas.) Pronouns: she/her _______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners

On Fri, Oct 18, 2019 at 06:59:05PM +0200, Ut Primum wrote:
Hi, this is my solution:
productLastPart :: Int -> [Int] -> Int productLastPart n xs = product (take n (reverse xs))
It only uses functions product, take and reverse Regards, Ut
That should work. I’d probably use point-free style, though, and avoid all of those brackets. productLastPart n = product . take n . reverse The version you’ve written runs in linear time, as would a version that worked like this: productLastPart n xs = product (drop (length xs - n) xs) because reverse, length and product (actually a partial application of foldr) are all linear in the length of the list—they access each element once. You can see the GHC implementation of reverse at https://hackage.haskell.org/package/base-4.12.0.0/docs/src/GHC.List.html#rev.... This turns out to be the best we can do with a regular Haskell list, because accessing the last element of a list is a linear-time operation: last :: [a] -> a last [] = error "Oh no!" last [x] = x last (x : xs) = last xs There do, however, exist list types like Sequence and Vector that allow constant-time access to both ends of the list. Hope this is helpful. Seph -- Seph Shewell Brockway, BSc MSc (Glas.) Pronouns: she/her
participants (3)
-
instanct95@aol.com
-
Seph Shewell Brockway
-
Ut Primum