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;
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
add a comment |
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
1
Two different variables are namedx.
– 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 ofgroup, because the RHS is ill-typed.
– Joseph Sible
Mar 9 at 4:27
add a comment |
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
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
haskell
asked Mar 9 at 2:17
K Split XK Split X
9753619
9753619
1
Two different variables are namedx.
– 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 ofgroup, because the RHS is ill-typed.
– Joseph Sible
Mar 9 at 4:27
add a comment |
1
Two different variables are namedx.
– 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 ofgroup, 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
add a comment |
1 Answer
1
active
oldest
votes
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
something ++ [x]is less practical (and "efficient", although it doesn't really matter here) asx : somethinghere, as order doesn't matter,- a function as
f = x -> somethingshould really be written asf x = something, - 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].
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
add a comment |
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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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
something ++ [x]is less practical (and "efficient", although it doesn't really matter here) asx : somethinghere, as order doesn't matter,- a function as
f = x -> somethingshould really be written asf x = something, - 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].
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
add a comment |
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
something ++ [x]is less practical (and "efficient", although it doesn't really matter here) asx : somethinghere, as order doesn't matter,- a function as
f = x -> somethingshould really be written asf x = something, - 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].
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
add a comment |
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
something ++ [x]is less practical (and "efficient", although it doesn't really matter here) asx : somethinghere, as order doesn't matter,- a function as
f = x -> somethingshould really be written asf x = something, - 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].
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
something ++ [x]is less practical (and "efficient", although it doesn't really matter here) asx : somethinghere, as order doesn't matter,- a function as
f = x -> somethingshould really be written asf x = something, - 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].
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
add a comment |
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
add a comment |
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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 ofgroup, because the RHS is ill-typed.– Joseph Sible
Mar 9 at 4:27