Skip to main content

Practice Problems: Recursion with Lists (Pyret)

Tests are given for all practice problems for you to run against your own implementation.

Tasks:

  1. list-length - count the number of elements in a list
  2. list-sum - add up all numbers in a list
  3. interleave - combine two lists by alternating elements
  4. reverse-list - reverse the order of elements in a list

Template:

fun list-length(lst :: List<Number>) -> Number:
# write your function here
where:
list-length([list: 1, 2, 3]) is 3
list-length([list: 10, 20]) is 2
list-length([list: 5]) is 1
list-length([list: ]) is 0
end

fun list-sum(lst :: List<Number>) -> Number:
# write your function here
where:
list-sum([list: 1, 2, 3]) is 6
list-sum([list: 5]) is 5
list-sum([list: ]) is 0
list-sum([list: -1, -2, -3]) is -6
end

fun interleave(lst1 :: List<Number>, lst2 :: List<Number>) -> List<Number>:
# write your function here
where:
interleave([list: 1, 3, 5], [list: 2, 4, 6]) is [list: 1, 2, 3, 4, 5, 6]
interleave([list: 1, 2, 3], [list: 10]) is [list: 1, 10, 2, 3]
interleave([list: ], [list: 1, 2]) is [list: 1, 2]
interleave([list: 1, 2], [list: ]) is [list: 1, 2]
interleave([list: ], [list: ]) is [list: ]
end

fun reverse-list(lst :: List<Number>) -> List<Number>:
# write your function here
where:
reverse-list([list: 1, 2, 3]) is [list: 3, 2, 1]
reverse-list([list: 10, 20]) is [list: 20, 10]
reverse-list([list: 5]) is [list: 5]
reverse-list([list: ]) is [list: ]
reverse-list([list: 1, 1, 1]) is [list: 1, 1, 1]
end