In-class-3
Class: CSCE-314
-- Step 1: Generate an Arithmetic Sequence (generateSequence)
-- Note you can create a list using [1,3...30]
generateSequence :: Int -> Int -> Int -> [Int]
generateSequence st sp n = [st, st + sp .. n]
-- Step 2: Filter Values Based on a Condition
-- return a list of numbers that are evenly divided by your divisor
filterDivisible :: Int -> [Int] -> [Int]
filterDivisible div (x : xs) = filter (\x -> x `mod` div == 0) (x : xs)
-- The backslash '\' is “lambda” (function)
-- 'x' is the parameter to this function.
-- '-> x' means the function returns 'x'.
-- Step 3: Transform the Values
-- create a function to square a value,
transformSequence :: [Int] -> [Int]
transformSequence (x : xs) = map (^2) (x : xs)
-- Step 4: Calculate the Sum of the sequence
sumSequence :: [Int] -> Int
sumSequence [] = 0
sumSequence (x : xs) = x + sumSequence xs
-- Can also use:
-- sumSequence :: [Int] -> Int
-- sumSequence (x : xs) = sum
-- Main Program
main :: IO ()
main = do
putStrLn "Enter the start of the sequence:"
start <- readLn
putStrLn "Enter the step size:"
step <- readLn
putStrLn "Enter the end of the sequence to generate:"
n <- readLn
putStrLn "Enter the divisor for filtering:"
divisor <- readLn
-- Generate the sequence
let sequence = generateSequence start step n
putStrLn $ "Generated sequence: " ++ show sequence
-- Filter the sequence
let filtered = filterDivisible divisor sequence
putStrLn $ "Filtered sequence (divisible by " ++ show divisor ++ "): " ++ show filtered
-- Transform the sequence
let transformed = transformSequence filtered
putStrLn $ "Transformed sequence (squared values): " ++ show transformed
-- Calculate the sum
let sumTransformed = sumSequence transformed
putStrLn $ "Sum of transformed sequence: " ++ show sumTransformed