留学在线 2021-11-08 17:03:49
当我们接近学期末时,您将在Haskell达到精通。只是想想,仅仅2个月前,您才被介绍到命令行和.hs文件中,而现在您正在构建AI以在排行榜上竞争!
但是,像所有技能一样,练习总是会有所帮助的。因此,当您完善自己的AI并为考试做好准备时,我们组成了一小组问题,这些问题将在Haskell的所有领域进行测试。试试看,看看他们怎么走!
问题1:字形图
让我们使用列表和递归来确定给定的字符串是否是全景图。字谜是与另一个单词或短语具有相同字母的单词或短语(“ nag ram”是“ anagram”的相似词):七巧板是使用字母表中每个字母的句子。其中最受欢迎的是“快速的棕色狐狸跳过懒狐狸”。看看它在英语字母的每个字母上至少有一次用法吗?
您的任务:使用列表和递归来确定字符串是否为字母。
答:
isPanagram :: String -> Bool
isPanagram sentence = and (zipWith (||) (helper sentence ['a' .. 'z']) (helper sentence ['A' .. 'Z']))
where
-- Helper produces a list of booleans, checking if each element of ls2 is in ls1
helper :: Eq a => [a] -> [a] -> [Bool]
helper ls1 ls2 = map ((flip elem) ls1) ls2
问题2:
编写代码以查找数字的最大素数。
答:
primeFactors :: Int -> [Int]
primeFactors n = primeFactors' n 2
where
primeFactors' 1 _ = []
primeFactors' n f
| n `mod` f == 0 = f : primeFactors' (n `div` f) f
| otherwise = primeFactors' n (f + 1)
largestPrimeFactor :: Int -> Int
largestPrimeFactor n = last (primeFactors n)
问题3:Lambda表达式
既然您已经了解了lambda表达式的实用性,请尝试使用结合了高阶函数的lambda表达式编写以下函数。
对于双打列表中的每个元素,将其替换为x^2 + x。例如,squareAndAdd [1, 1.5, 2]应该返回[2, 3.75, 6]。
答:
squareAndAdd :: [Int] -> [Int]
squareAndAdd list = map (\x -> x^2 + x) list
从整数列表中提取大于10的偶数。例如,filterEven10 [1, 4, 11, 14, 10, 18]应返回[14, 18]
答:
filterEven10 :: [Int] -> [Int]
filterEven10 list = filter (\x -> even x && x > 10) list
计算机科学COMP1100练习问题解决方案辅导找老师在线一对一辅导,快速通过。
2023-06-26
2023-06-07
2022-02-09
2023-05-25
2024-02-19
2022-03-01
2020-02-20
2020-02-20
2021-10-25
2023-03-16
2024-01-04
2023-08-25
2021-12-22
2023-08-17
2023-06-07
2023-05-22
2021-12-31
2021-12-08
2023-09-15
2022-06-22