Haskell CW II.3a

Tiny pieces to help you get better at programming in Haskell.

Goals:

  • Range notation [a,b..c] to make lists of integers.
  • Apply a function to everything in a list by using the “list comprehension”.
  • Filter out some elements from an existing list using a list comprehension.
  • Use “brute force”, checking all possibilities for the ones that satisfy some condition.

Micro-projects

  1. A list of the first 1000 integers.

  2. A list of the first 1000 perfect cubes.

  3. Set the variable a3 to be the sum of the first 100 perfect squares.

  4. The type signature for a3, the previous answer..

  5. A list of all of the perfect squares between 90 and 1919.

  6. The type signature for a list of integers.

  7. The product of the numbers in the list of perfect squares above.

  8. A function sqList lower upper to give all of the perfect squares between lower and upper, inclusive.

      check_8 = (sqList 16 81 == [16,25,36,49,64,81])
    
  9. The type signature for the function sqList.

  10. Use your function to get the first 17 perfect squares between 1500 and 4500.

  11. Write a new function sq25 that will return the first 25 perfect squares between lower and upper. (If there are not 25, the function will just return however many there actually are, instead of giving some error.)

  12. A list with every third lowercase letter, starting at ‘a’ then ’d’. (Hint: letters work the same as numbers.)

  13. A string with the last half of the alphabet (beginning with ’n’).

  14. Write a function that takes in a list and produces a list of ordered pairs (item, more), giving the item and how many more items after it are in the list.

Basic functions

  1. The remainder when 921013 is divided by 31.
  2. The number of complete groups of 17 candies that can be formed from a box containing with 23148 hard candies.
  3. Find five to the twelfth power.
  4. Find seven to the 707 power.
  5. A curiosity: the integer number of times that 3 goes into (-17), and how much is “left over”.
  6. Know/learn how to get a positive and negative “left over” amount in the previous question.

Medium functions

Write the signature for each.

  1. Write a function mySmall that takes in four integer inputs and returns the smallest.

  2. Create a function myStarts that takes in two lists and returns a tuple with the first element from each list.

  3. Write myMix that takes in two lists and gives a tuple with the first element from the first list and the last element from the second list.

    myMix [1,2,3] [10,20,30] == (1,30)
    
  4. Create dublr that takes in one list and returns a new list consisting of the same information forward then backward.

    dublr [1,2,3] == [1,2,3,3,2,1]
    

Step up

  1. Write a function sqLast25 lower upper that will return the last 25 perfect squares between lower and upper (inclusive).

    sqLast25 :: Int -> Int -> [Int]
    

Obscure

  1. What is the successor of the character ‘Z’?
  2. How about the predecessor of the character ‘A’?

Notes

Last modified September 21, 2026: Small cleanup edits. (d78cbf4)