Problem 21
Insert an element at a given position into a list. Treat the first position as index 1.
Example
insertAt 2 'l' ['E', 'm'] == ['E', 'l', 'm']
Unit Test
import Html
import List
insertAt : Int -> a -> List a -> List a
insertAt n v xs =
-- your implementation here
[]
main : Html.Html a
main =
Html.text
<| case test of
0 ->
"Your implementation passed all tests."
1 ->
"Your implementation failed one test."
x ->
"Your implementation failed " ++ (toString x) ++ " tests."
test : Int
test =
List.length
<| List.filter ((==) False)
[ insertAt 2 99 [ 1, 2, 5, 5, 2, 1 ] == [ 1, 99, 2, 5, 5, 2, 1 ]
, insertAt 3 99 (List.range 1 14) == [ 1, 2, 99, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 ]
, insertAt 6 99 (List.range 1 5) == [ 1, 2, 3, 4, 5, 99 ]
, insertAt 0 99 (List.range 1 5) == [ 99, 1, 2, 3, 4, 5 ]
, insertAt -1 99 (List.range 1 5) == [ 99, 1, 2, 3, 4, 5 ]
, insertAt 1 99 (List.range 1 5) == [ 99, 1, 2, 3, 4, 5 ]
, insertAt 2 "x" [ "1", "2", "3", "4", "5" ] == [ "1", "x", "2", "3", "4", "5" ]
]
Hints
- Try using split from Problem 17
- The core package List has what you need.
- Recursion can solve this.