20-CS-4003-001 Organization of Programming Languages Fall 2017
Lab Assignment 9

Lambda calculus, Type theory, Formal semantics, Program analysis

Hamming's Sequence

Due: 8 November, 2017 (submit instructions: here)

Rationale:
    Simple warmup exercise.
 
Lab Problem (three parts):
1. Create a haskell procedure called merge that takes as input two (possibly infinite) lists of increasing integers and outputs a single increasing sequence consisting of all the numbers in the two input lists. For example, if the input lists are
   [3,7,8,12,89]
   [1,2,8,9,19,22]
then
   *Main> merge [3,7,8,12,89] [1,2,8,9,19,22]
   [1,2,3,7,8,8,9,12,19,22,89]

2. Create a haskell procedure called times that takes as input a positive integer m and a list of integers L and outputs a list of integers, each of which is m times its position counterpart in L. For example

   *Main> times 3 [4,8,9,16]
   [12,24,27,48]

3. Create a haskell procedure called hamming that takes as input an increasing list P of prime numbers and outputs all integers whose prime factors are a subset of P, in increasing order. For example

   *Main> take 20 (ham [3,5,11])
   [3,5,9,11,15,25,27,33,45,55,75,81,99,121,125,135,165,225,243,275]
Observe take must be used or else haskell attempts to print the entire (infinite) list.