- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在做一项作业,计算列表中所有整数的总和。除了标准加法运算符之外,我应该在没有任何标准库函数帮助的情况下这样做。
我假设这意味着我不能使用 length
。 我的理解是正确的,对吗?这成为问题,因为我不确定我如何知道何时停止我的递归函数以遍历数组。
输入的 a 应该预期处理的是 []
和 [0-X]
,其中 x 是任何整数。该示例的 X 为 10,因此不要期望测试任何大的东西。
作业提到它应该采用以下格式,但我不确定我是否遵循:
sum1 [] = ...
sum1 (x:xs) = ...
这是我使用的长度。它工作正常,我真的不在乎它是否低效。这是我第一次使用 Haskell:
iterate_list :: [Int] -> Int -> Int -> IO()
iterate_list func_list index total = do
if index < length func_list
then do
let new_total = total + (func_list !! index)
let new_index = index + 1
iterate_list func_list new_index new_total
else
print(total)
sum1 :: [Int] -> IO()
sum1 list = do
if length list < 1
then do
print(0)
else
iterate_list list 0 0
更新:根据评论,这是我生成的代码。
total :: Int
total = 0
sum1 :: [Int] -> IO()
sum1 (x:xs) = do
if xs == []
then do
print(total)
else do
let total = total + x
sum1 xs
但是,我现在遇到的问题是 total
返回 0,几乎就像它是一个常数。我可能会那样编程,但我不太确定发生了什么。
根据赋值描述,我不能通过递归函数传递一个变量来存储这个值。我以前也这样做过。有谁知道是否有办法在函数外部设置“total
”变量。
最佳答案
total :: Int
total = 0
sum1 :: [Int] -> IO()
sum1 (x:xs) = do
if xs == []
then do
print(total)
else do
let total = total + x
sum1 xs
这段代码说了什么:
全局总数
是一个常量整数,等于0
sum1
获取一个整数列表并生成一个不产生任何结果的 IO 操作
如果给 sum1
一个非空列表,则:
如果该列表的尾部为空(即整个列表有 1 个元素),则打印全局变量 total
否则:
创建一个名为total
的新局部变量,隐藏全局变量,并将其定义为x
加上自身(无穷大循环)
在列表的尾部递归调用sum1
如果给 sum1
一个空列表,它会抛出一个错误
这表明您的思考非常迫切。与其尝试定义一个自下而上的过程来逐步更新总数,直到它建立最终结果,您需要考虑如何计算总数通过分解输入作为一个值。 Haskell 中的变量是不可变的;当你写 =
时,它的意思是相等,永远不要“赋值”或“更新”。
首先,sum1
应该返回 Int
,因为您不需要为此使用 IO
或 do
符号。
sum1 :: [Int] -> Int
如果你想打印 sum1
应用于某些列表 someList
的结果(例如来自 main
),使用 print
在那里,即 print (sum1 someList)
。
接下来,应根据输入的两种可能情况定义函数:空列表和非空列表。
sum1 [] = …
sum1 (x : xs) = …
您需要定义这些情况,以便像 sum1 [1, 2, 3, 4]
这样的输入,您记得是 syntactic sugar对于 sum1 (1 : (2 : (3 : (4 : []))))
生成等同于 1 + 2 + 3 + 4
的内容。
首先,在空列表的情况下,结果应该是什么?您可以从以下事实中推断出这一点:附加在一起的两个列表的总和应该与它们各自的总和相同;也就是说,对于任何列表 xs
和 ys
,这些表达式应该产生相同的结果:
sum1 xs + sum1 ys
sum1 (xs ++ ys)
假设xs
或ys
为空,不应该改变和:
sum1 [] + sum1 ys
= sum1 ([]++ ys)
= sum1 ys
sum1 xs + sum1 []
= sum1 (xs++ [])
= sum1 xs
其次,对于非空情况:给定一个元素 x::Int
和一个列表 xs::[Int]
,您需要计算两者的总和。例如,给定 [1, 2, 3, 4]
,x
设置为 1
而 xs
为[2、3、4]
。假设您已经有了 xs
的总和;那和 x
的结果是什么?以及如何获得 xs
的总和?
关于haskell - 全局变量 “total” 未正确更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66177450/
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我有这段代码,我想在另一张工作表中查找一些单元格,如果它们符合条件,则将相邻单元格添加到返回到调用单元格函数的总数中。 Function collectUtfall(A1 As String, Ax
我知道默认的“CTRL+B”Windows 命令可用于显示所有嵌套文件。 是否有显示所有嵌套文件夹的快捷方式? 最佳答案 我怀疑 Total Commander 中是否存在此功能。内置tree实用性对
关于我的问题SQL是, 我有一个表,用户可以在其中输入名为 time_report 的时间报告数据。每个 time_report 都输入一个服务代码,每个代码都有不同的含义,包括开始、停止、时间和总计
在 Total Commander 中搜索时如何忽略 .svn 文件夹? 最佳答案 要从搜索中排除某些文件或文件夹,请在“搜索字段:”中使用以下语法: 从搜索中排除 *.bak 和 *.old 文件
我将如何编写 css 来访问以下类“total total_plus hidden_elem”或“total total_plus”? 我有 class="total total_plus"和 c
我正在查看 powershellpro.com 上的一些代码示例,但不明白他为什么编写循环数组的示例代码: ...增量从零开始然后加一,直到它小于或等于数组的长度减一... for ($i=0; $i
做了一个虚拟数据: data dummy; input q1 q3 q4 q2 q6$ bu$ q5; cards; 1 2 3 5 sa an 3 2 4 3 6 sm sa 4 6 5 3 8 c
我想知道如何在 magento 1.7 的订单网格中添加以下两个额外的列 客户总订单数 客户在订单上花费的总金额 我已经设法添加了列,但我无法让它显示任何数据。我相信问题的关键在于函数 *_prepa
我正在使用 dataImportHandler 将数据从 Oracle 数据库导入 solr。尽管导入和索引编制成功,但由于未创建文档,我无法搜索。日志中也没有错误。这是我的配置文件片段。请帮忙。
项目 item_id title active = 1/0 items_categories_map item_id category_id 我需要得到结果 category_id items_tot
当我运行命令时: find / 2>/dev/null -user root -type f -mmin -1 -exec du -cb {} + | grep total | head -1 我得到
我不明白为什么有时,计划的总成本可能是一个非常小的数字,而查看计划的内部,我们会发现巨大的成本。 (确实查询很慢)。 有人可以解释我吗? 这是一个例子。 显然,成本高的部分来自主选择中的一个字段,该字
因此,脚本以初始值 $8.90 开始,其想法是根据所选选项添加额外费用,HTML 分为 3 个部分 1.check-boxes、2 .选择并3.输入(文本)。 每个部分都是独立工作的,我正在尝试找到一
我有一个小问题。我一直在网上寻找答案,但主要是针对未生成/添加的输入字段。 $(document).ready(function(){ /* --- ADD FIELD --- */ $('
js框架。我正在尝试将数据从发布请求保存到数据库 模型(文章.js): NEWSCHEMA('Article').make(function(schema) { schema.define('titl
我想要所有间隔的总和,但我写这段代码时出现错误:使用未分配的局部变量 total ? enter TimeSpan total; foreach (var grp in query) { Time
我得到了以下数据,我需要返回递归总数(在本例中为 60)。下面的代码返回TypeError: Cannot read property 'Symbol(Symbol.iterator)' of und
我的项目要插入几个小时,你花了多少时间。它适用于整数值,但现在我需要添加字符串值。像Sunday ="NotWorknig"这样的东西;星期一=“8”;星期二=“生病了”; function Tota
尝试让停止按钮在用户单击开始时提供数字的运行总数。停止按钮不会给出总数,也不会保存您单击它时开始给出的数字。 我在这里做错了什么? package com.egroegnosbig.dicerolle
我是一名优秀的程序员,十分优秀!