计算机科学COMP1100练习问题解决方案辅导

2021-11-08 17:03    来源:留学在线       阅读量:54

当我们接近学期末时,您将在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练习问题解决方案辅导找老师在线一对一辅导,快速通过。

"留学在线"的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与

我们联系删除或处理,客服邮箱756005163@qq.com,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同

其观点或证实其内容的真实性。