当前位置: 首页 > 后端技术 > Java

CISC360广场

时间:2023-04-01 19:15:41 Java

CISC360作业1将于2021年1月26日星期二晚上11:59到期,来自onQJanaDunfield2021年1月17日提醒:所有提交的作品都必须是您自己的。你可以(也应该)向导师、助教或Piazza寻求帮助。这项作业的大部分问题都是关于编写代码的,但也有一些问题是关于步进的。请在文件a1.hs(搜索Q3.1和Q3.2)中指示的注释中写下你的答案。尽早开始:即使有些问题对你来说很容易,Haskell是一种非常不同的语言,你可能需要比你更多的时间think.Late政策:迟到24小时(即第二天晚上11:59之前)提交的作业将被接受,并收取15%的罚款。0重要提示:您的文件必须编译您的文件必须成功加载(:在GHCi中加载),否则我们会自动从您的分数中减去30%。如果您的问题进行到一半并且时间用完,请注释掉导致:load失败的代码,方法是用{-包围它。..-},和写描述你正在尝试做什么的评论。我们通常可以为解决方案的进展证据提供部分标记,但我们需要加载和编译文件。0记录您的代码这基本上是一个“填空”任务,因此您不需要记录太多,除非你声明新的功能。在那种情况下,您需要写一条注释来解释该函数的作用。0力求简单您应该尝试找到一个简单的解决方案。你不必找到最简单的解决方案来获得满分,但你不应该有一个过于复杂的解决方案。如果您的解决方案过于复杂,可能会扣分。如果您担心您的解决方案是否太复杂,请联系讲师。0小心使用库函数Haskell有一个相当大的内置库。这个作业不是关于如何找到库函数,而是关于如何使用Haskell的一些核心特性。你不会得到很多分数,如果你你只需调用一个库函数来解决整个问题。关键是自己解决问题。a1,JanaDunfield,CISC,W.202112021/1/17§1添加你的学生ID如果你不确定你是否正在调用一个解决整个问题的库函数,请联系导师。请注意,如果我们建议使用库函数,您当然可以使用它。(我知道避免此问题的唯一方法是设计复杂且任意的问题,这样任何库函数都无法解决它们。我不喜欢解决复杂和任意的问题,你可能也不会。)1添加你的学生ID文件a1.hs将不会编译,直到你通过在=:--你的学生ID:student_id::Integerstudent_id之后添加你的学生ID号=你不需要写你的名字。当我们下载您提交的内容时,onQ在文件名中包含您的名字。2编写和测试小型Haskell函数2.1此函数接受三个整数m、n和p,如果m≤n≤p应返回True,否则返回False。填写通过替换between的定义使用适当的Haskell代码定义单词undefined,并在必要时删除=(例如,如果您决定使用守卫来定义between)。我们已经为between编写了五个测试用例,称为testbetween1、2等。这些被组合成testbetween,只有当所有五个测试都通过时才为True。2.2进位函数接受两个整数,如果两个整数都是奇数,则返回1,否则返回0(如果两个都是偶数,或者其中一个是偶数,另一个是奇怪的)。(这个名字的由来是它的结果是两个整数的最低有效位相加产生的“进位位”。)3步进问题3.1第一个表达式这些问题要求你步进两个小表达式。例如,第一步问题要求您执行获得结果所需的三个步骤。更换零件。(如果你想检查最后一行,你可以通过在GHCi中输入表达式来找到它。)(\x->x-(4+x))1=>__=>__=>__作者:arithmetica1,JanaDunfield,CISC,W.202122021/1/17§3Steppingquestions3.2第二个表达式另一个表达式稍微大一点,使用了一个函数triple,定义在注释中。提示:第一步不应用(调用)函数triple.Haskell看到表达式(\a->(\b->b(b3)))0三元组作为表达式(\a->(\b->b(b3)))0应用于参数三元组。表达式(\a->\b->(b(b3)))0是应用于参数0的函数(\a->(\b->b(b3)))。这是第一步发生的地方。提示:正确解法步骤6次(如空格结构所示)。4塔这道题需要写一个函数塔。你的函数应该是递归的——它的定义会调用它自己——并且不应该使用列表。这个想法是塔由下面的等式指定:但是Haskell没有循环,所以你have改用递归。讲义中的diag示例可能会有所帮助:diagn计算从0到n的整数之和,但不使用循环。相反,它在n?1上递归地调用自己。你可以把它想象成从n到0的倒数。文件a1.hs包含一些塔的测试。5基本转换你将为这个问题编写的函数返回Haskell字符串,它们是字符列表。我们还没有详细讨论列表;但是,对于这个问题,您只需要知道以下内容:?要返回包含单个字符0的字符串,请编写['0']。您也可以编写“0”。?要连接(附加)两个字符串,请使用内置函数++。例如:['1','2',3']++['4']返回“1234”,与['1','2','3','4']相同.5.1toBinary阅读上面toBinary的注释中的规范。通过将单词undefined替换为适当的Haskellcode来填写toBinary的定义,并且,如有必要,删除=(例如,如果您决定使用守卫定义toBinary)。5.2toNary阅读toNary上面评论中的规范。我们已经编写了定义的一部分,以检查无效的基数—toNary只需要处理2到10之间的基数。如果你将一个有效的基数传递给toNary,当Haskell到达“otherwise”守卫时你会得到一个错误。用您的代码替换“undefined”。您应该使用相同的代码处理2到10之间的所有基数。不要“硬编码”每个base,也就是说,不要做类似...=ifbase==2then...elseifbase==3then...elseifbase==4then的事情。..那将属于“过于复杂”的类别,并且会失去分数。a1,JanaDunfield,CISC,W.202142021/1/17WX:codehelp