![]() |
1
16
在=的左侧使用
在=的右侧添加
但在haskell中,标识符有一种类型,可能是一种非常复杂的类型,但也有一种类型。这包括
没有值用于
即使有了所有的解释,这也不是一个伟大的错误信息,是吗? 欢迎来到Haskell:-) 另外,你可能喜欢尝试“氦,用于学习haskell”,它为初学者提供了更好的错误信息。 |
![]() |
2
12
“sum”获取值列表并将其减少为单个值。您可以将其写为显式循环(记住haskell没有循环关键字,但使用递归)。请注意,根据列表的形状,定义有两个部分:
或更有效地, tail-recursive 风格:
但是,haskell有一个丰富的控制结构库,可以对懒惰的列表进行操作。在这种情况下, 减少 列表的一个值可以用一个reduce函数来完成:一个fold。 所以mysum可以写成:
例如:
你的错误是使用 地图 ,它一次转换一个列表、一个元素,而不是 折叠 . 我建议你从介绍哈斯克尔开始,也许” Programming in Haskell “,了解函数式编程的核心概念。介绍了其他很好的介绍材料。 in this question. |
![]() |
3
1
你需要读一个好的教程,有很多大的误解。 首先,我假设你指的是列表而不是数组。数组存在于haskell中,但在初学者级别,它们不是你会遇到的。(更不用说你用的是[1..10],它是数字1到10的列表)。 您想要的函数实际上是内置的,称为sum,因此我们必须调用其他函数,即new_sum:
|
![]() |
4
0
让我们来看看第一部分:
在这种情况下,总和的类型是什么?它接受一个数字并返回一个接受一个数字的函数,如果你写了这个数字,它将返回一个接受一个数字的函数等。 设求和x++x 您将拥有一个接受数字并返回函数+X的函数。 和 求和=+ 将返回一个接受两个整数并将其相加的函数。 现在让我们来看第二部分。 地图总和[1..10] map接受一个参数的函数,并将其应用于列表的每个元素。这里没有插入蓄能器的空间,所以让我们看看其他列表函数,特别是foldl、folder。这两个函数都有两个参数,一个是列表,另一个是起始值。foldl和folder的区别就在它们开始的那一边。L为左,1+2+3等,R为右,10+9+8等。 在foldl sum 0[1..10]中设sum=(+) |