How to fix this haskell function using take and drop while? Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern) Data science time! April 2019 and salary with experience The Ask Question Wizard is Live!How to reduce memory usage in a Haskell app?How can a time function exist in functional programming?Reasonably efficient pure-functional matrix product in Haskell?Infinite list of powers using subset of HaskellHaskell/Parsec: How do you use the functions in Text.Parsec.Indent?Little problems from a Haskell learner about filter & foldHaskell checkers - how to write a function that returns a list of possible jumpshaskell initial accumulator 'null' valueHow does the presence of the “error” function bear on the purity of Haskell?How to create function minimax in Haskell?

Can I ask an author to send me his ebook?

Can a Wizard take the Magic Initiate feat and select spells from the Wizard list?

“Since the train was delayed for more than an hour, passengers were given a full refund.” – Why is there no article before “passengers”?

Short story about an alien named Ushtu(?) coming from a future Earth, when ours was destroyed by a nuclear explosion

Why not use the yoke to control yaw, as well as pitch and roll?

How do I deal with an erroneously large refund?

Reflections in a Square

How to leave only the following strings?

Why are two-digit numbers in Jonathan Swift's "Gulliver's Travels" (1726) written in "German style"?

Is there a way to convert Wolfram Language expression to string?

Meaning of "Not holding on that level of emuna/bitachon"

What is the evidence that custom checks in Northern Ireland are going to result in violence?

Why does my GNOME settings mention "Moto C Plus"?

Grounding PCB Within Aluminum Enclosure

Converting a text document with special format to Pandas DataFrame

Does Prince Arnaud cause someone holding the Princess to lose?

Can the van der Waals coefficients be negative in the van der Waals equation for real gases?

Who can become a wight?

Is my guitar’s action too high?

Why did Bronn offer to be Tyrion Lannister's champion in trial by combat?

When speaking, how do you change your mind mid-sentence?

How to ask rejected full-time candidates to apply to teach individual courses?

Assertions In A Mock Callout Test

Why isn't everyone flabbergasted about Bran's "gift"?



How to fix this haskell function using take and drop while?



Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern)
Data science time! April 2019 and salary with experience
The Ask Question Wizard is Live!How to reduce memory usage in a Haskell app?How can a time function exist in functional programming?Reasonably efficient pure-functional matrix product in Haskell?Infinite list of powers using subset of HaskellHaskell/Parsec: How do you use the functions in Text.Parsec.Indent?Little problems from a Haskell learner about filter & foldHaskell checkers - how to write a function that returns a list of possible jumpshaskell initial accumulator 'null' valueHow does the presence of the “error” function bear on the purity of Haskell?How to create function minimax in Haskell?



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








1















I am asked to create a haskell function that will perform the following:



group [1,1,2,3,3] = [[1,1],[2],[3,3]]

group [] = []


Essentially it groups the consecutive terms that are the same



I should use take and drop while:



group [] = []
group (x:xs) = (takeWhile cond xs ++ [x]) : group (dropWhile cond xs)
where
cond = (x -> x == head xs)


Here is what I have.



The above works for cases where a single element is at the end: group [1,1,2] == [[1,1],2] but not for cases where it's in the middle: group [1,1,1,2,4] == [[1,1,1],[4,2]] (it should be [[1,1,1],[4],[2]]



What is my mistake in the function?










share|improve this question

















  • 1





    Two different variables are named x.

    – Jason Orendorff
    Mar 9 at 3:38






  • 2





    group [1,1,2] == [[1,1],2] I know that can't be true without even looking at the source of group, because the RHS is ill-typed.

    – Joseph Sible
    Mar 9 at 4:27

















1















I am asked to create a haskell function that will perform the following:



group [1,1,2,3,3] = [[1,1],[2],[3,3]]

group [] = []


Essentially it groups the consecutive terms that are the same



I should use take and drop while:



group [] = []
group (x:xs) = (takeWhile cond xs ++ [x]) : group (dropWhile cond xs)
where
cond = (x -> x == head xs)


Here is what I have.



The above works for cases where a single element is at the end: group [1,1,2] == [[1,1],2] but not for cases where it's in the middle: group [1,1,1,2,4] == [[1,1,1],[4,2]] (it should be [[1,1,1],[4],[2]]



What is my mistake in the function?










share|improve this question

















  • 1





    Two different variables are named x.

    – Jason Orendorff
    Mar 9 at 3:38






  • 2





    group [1,1,2] == [[1,1],2] I know that can't be true without even looking at the source of group, because the RHS is ill-typed.

    – Joseph Sible
    Mar 9 at 4:27













1












1








1








I am asked to create a haskell function that will perform the following:



group [1,1,2,3,3] = [[1,1],[2],[3,3]]

group [] = []


Essentially it groups the consecutive terms that are the same



I should use take and drop while:



group [] = []
group (x:xs) = (takeWhile cond xs ++ [x]) : group (dropWhile cond xs)
where
cond = (x -> x == head xs)


Here is what I have.



The above works for cases where a single element is at the end: group [1,1,2] == [[1,1],2] but not for cases where it's in the middle: group [1,1,1,2,4] == [[1,1,1],[4,2]] (it should be [[1,1,1],[4],[2]]



What is my mistake in the function?










share|improve this question














I am asked to create a haskell function that will perform the following:



group [1,1,2,3,3] = [[1,1],[2],[3,3]]

group [] = []


Essentially it groups the consecutive terms that are the same



I should use take and drop while:



group [] = []
group (x:xs) = (takeWhile cond xs ++ [x]) : group (dropWhile cond xs)
where
cond = (x -> x == head xs)


Here is what I have.



The above works for cases where a single element is at the end: group [1,1,2] == [[1,1],2] but not for cases where it's in the middle: group [1,1,1,2,4] == [[1,1,1],[4,2]] (it should be [[1,1,1],[4],[2]]



What is my mistake in the function?







haskell






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Mar 9 at 2:17









K Split XK Split X

9753619




9753619







  • 1





    Two different variables are named x.

    – Jason Orendorff
    Mar 9 at 3:38






  • 2





    group [1,1,2] == [[1,1],2] I know that can't be true without even looking at the source of group, because the RHS is ill-typed.

    – Joseph Sible
    Mar 9 at 4:27












  • 1





    Two different variables are named x.

    – Jason Orendorff
    Mar 9 at 3:38






  • 2





    group [1,1,2] == [[1,1],2] I know that can't be true without even looking at the source of group, because the RHS is ill-typed.

    – Joseph Sible
    Mar 9 at 4:27







1




1





Two different variables are named x.

– Jason Orendorff
Mar 9 at 3:38





Two different variables are named x.

– Jason Orendorff
Mar 9 at 3:38




2




2





group [1,1,2] == [[1,1],2] I know that can't be true without even looking at the source of group, because the RHS is ill-typed.

– Joseph Sible
Mar 9 at 4:27





group [1,1,2] == [[1,1],2] I know that can't be true without even looking at the source of group, because the RHS is ill-typed.

– Joseph Sible
Mar 9 at 4:27












1 Answer
1






active

oldest

votes


















5














Short answer: Your mistake is the usage of head in your condition. You want to compare with x, not head xs.



Stylistically, note also that




  1. something ++ [x] is less practical (and "efficient", although it doesn't really matter here) as x : something here, as order doesn't matter,

  2. a function as f = x -> something should really be written as f x = something,

  3. and you probably shouldn't use the same variable name to refer to different values, it's get confusing very easily.

Your function cond is easily rewritten using a partially applied ==:



group [] = []
group (x:xs) = (x : takeWhile cond xs) : group (dropWhile cond xs)
where cond = (==) x


This yields the expected result for group [1,1,1,2,4].






share|improve this answer




















  • 1





    Did you mean to say "less practical" instead of "more practical"?

    – Fyodor Soikin
    Mar 9 at 3:43











  • @FyodorSoikin Yes, thank you. Edited my post.

    – tolUene
    Mar 9 at 3:46











Your Answer






StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");

StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55073376%2fhow-to-fix-this-haskell-function-using-take-and-drop-while%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









5














Short answer: Your mistake is the usage of head in your condition. You want to compare with x, not head xs.



Stylistically, note also that




  1. something ++ [x] is less practical (and "efficient", although it doesn't really matter here) as x : something here, as order doesn't matter,

  2. a function as f = x -> something should really be written as f x = something,

  3. and you probably shouldn't use the same variable name to refer to different values, it's get confusing very easily.

Your function cond is easily rewritten using a partially applied ==:



group [] = []
group (x:xs) = (x : takeWhile cond xs) : group (dropWhile cond xs)
where cond = (==) x


This yields the expected result for group [1,1,1,2,4].






share|improve this answer




















  • 1





    Did you mean to say "less practical" instead of "more practical"?

    – Fyodor Soikin
    Mar 9 at 3:43











  • @FyodorSoikin Yes, thank you. Edited my post.

    – tolUene
    Mar 9 at 3:46















5














Short answer: Your mistake is the usage of head in your condition. You want to compare with x, not head xs.



Stylistically, note also that




  1. something ++ [x] is less practical (and "efficient", although it doesn't really matter here) as x : something here, as order doesn't matter,

  2. a function as f = x -> something should really be written as f x = something,

  3. and you probably shouldn't use the same variable name to refer to different values, it's get confusing very easily.

Your function cond is easily rewritten using a partially applied ==:



group [] = []
group (x:xs) = (x : takeWhile cond xs) : group (dropWhile cond xs)
where cond = (==) x


This yields the expected result for group [1,1,1,2,4].






share|improve this answer




















  • 1





    Did you mean to say "less practical" instead of "more practical"?

    – Fyodor Soikin
    Mar 9 at 3:43











  • @FyodorSoikin Yes, thank you. Edited my post.

    – tolUene
    Mar 9 at 3:46













5












5








5







Short answer: Your mistake is the usage of head in your condition. You want to compare with x, not head xs.



Stylistically, note also that




  1. something ++ [x] is less practical (and "efficient", although it doesn't really matter here) as x : something here, as order doesn't matter,

  2. a function as f = x -> something should really be written as f x = something,

  3. and you probably shouldn't use the same variable name to refer to different values, it's get confusing very easily.

Your function cond is easily rewritten using a partially applied ==:



group [] = []
group (x:xs) = (x : takeWhile cond xs) : group (dropWhile cond xs)
where cond = (==) x


This yields the expected result for group [1,1,1,2,4].






share|improve this answer















Short answer: Your mistake is the usage of head in your condition. You want to compare with x, not head xs.



Stylistically, note also that




  1. something ++ [x] is less practical (and "efficient", although it doesn't really matter here) as x : something here, as order doesn't matter,

  2. a function as f = x -> something should really be written as f x = something,

  3. and you probably shouldn't use the same variable name to refer to different values, it's get confusing very easily.

Your function cond is easily rewritten using a partially applied ==:



group [] = []
group (x:xs) = (x : takeWhile cond xs) : group (dropWhile cond xs)
where cond = (==) x


This yields the expected result for group [1,1,1,2,4].







share|improve this answer














share|improve this answer



share|improve this answer








edited Mar 9 at 3:45

























answered Mar 9 at 3:31









tolUenetolUene

323114




323114







  • 1





    Did you mean to say "less practical" instead of "more practical"?

    – Fyodor Soikin
    Mar 9 at 3:43











  • @FyodorSoikin Yes, thank you. Edited my post.

    – tolUene
    Mar 9 at 3:46












  • 1





    Did you mean to say "less practical" instead of "more practical"?

    – Fyodor Soikin
    Mar 9 at 3:43











  • @FyodorSoikin Yes, thank you. Edited my post.

    – tolUene
    Mar 9 at 3:46







1




1





Did you mean to say "less practical" instead of "more practical"?

– Fyodor Soikin
Mar 9 at 3:43





Did you mean to say "less practical" instead of "more practical"?

– Fyodor Soikin
Mar 9 at 3:43













@FyodorSoikin Yes, thank you. Edited my post.

– tolUene
Mar 9 at 3:46





@FyodorSoikin Yes, thank you. Edited my post.

– tolUene
Mar 9 at 3:46



















draft saved

draft discarded
















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55073376%2fhow-to-fix-this-haskell-function-using-take-and-drop-while%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

AWS Lex not identifying response if by a variable The 2019 Stack Overflow Developer Survey Results Are In Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) The Ask Question Wizard is Live! Data science time! April 2019 and salary with experienceEnforcing custom enumeration in AWS LEX for slot valuesHow to give response based on user response in Amazon Lex?Intercepting AWS Lambda Response to a AWS Lex QueryLex chat bot error: Reached second execution of fulfillment lambda on the same utteranceamazon lex showing invalid responseLambda response send back to Lex slot?Response card in Amazon lexAmazon Lex - Lambda response return HTML to botHow can I solve 424 (Failed Dependency) (python) obtained from Amazon lex?

Алба-Юлія

Захаров Федір Захарович