I have an assigment and im kinda stuck:
xs = [4, 1]
ys = [3, 2]
the goal is to create a list [1, 2, 3, 4]
I am allowed to use the following commands:
head
, tail
,
, !!
, reverse
, take
, drop
, init
I know that tail xs (reverse ys)
results in [1, 2, 3]
but how do i get the 4
at the end?
My "solution" would have been something along the lines of:
zs = tail xs (reverse ys (head xs)
zs = [1, 2, 3, 4]
but instead im getting the following error:
<interactive>:39:1: error:
* Non type-variable argument in the constraint: Num [a]
(Use FlexibleContexts to permit this)
* When checking the inferred type
it :: forall a. (Num a, Num [a]) => [a]
The problem is i have no clue what that means It would be nice if someone could explain me how the brackets work in haskell and how i can solve the problem.
CodePudding user response:
You have unbalanced parentheses in your demonstrated attempt.
tail xs (reverse ys (head xs)
Assuming you meant:
tail xs (reverse ys (head xs))
head xs
is not a list, so using it with
will yield an error. But we can make it a list with a single element quite easily.
tail xs (reverse ys [head xs])
This now yields [1, 2, 3, 4]
, but you can further remove the parentheses because of how
associates.
tail xs reverse ys [head xs]