Haskell 哈斯克尔增量为1

Haskell 哈斯克尔增量为1,haskell,Haskell,尝试创建一个Haskell程序,将列表中的每个数字递增一 module Add1List where add1_list_comp :: [Integer] -> [Integer] add1_list_comp [x] = [x + 1| x <- [x]] module add1列出其中的 add1\u list\u comp::[Integer]->[Integer] add1_list_comp[x]=[x+1|x 这么简单 或者,以你的方式 add1_list_comp

尝试创建一个Haskell程序,将列表中的每个数字递增一

module Add1List where
add1_list_comp :: [Integer] -> [Integer]
add1_list_comp [x] = [x + 1| x <- [x]]
module add1列出其中的
add1\u list\u comp::[Integer]->[Integer]
add1_list_comp[x]=[x+1|x
这么简单

或者,以你的方式

add1_list_comp xs = [x + 1| x <- xs]

模式在列表中是否与单个项目匹配,这就是为什么它在多个项目的列表中失败。

我看到问题已经得到了回答,但也许我可以解释得更多一些。 函数的参数是模式匹配的,一般规则是

(x:xs) 
x是列表的头,xs是列表的尾,可能是空列表

[]
[x] or (x:[]) 
空列表

[]
[x] or (x:[]) 
都是相同的,这是一个只有一个变量的列表

没有构造函数的名称,如“[]”、“:”、“(,)”可以匹配任何内容,因此如果要匹配特殊情况,应该将特殊情况放在常规模式前面

 length [] = 0
 length [x] = 1
 length (x : xs) = 1 + length xs
顺便说一句,一般来说,当你想用一个列表做一些事情时,总会有一个高阶函数

 add1 xs = map (+1) xs 
是更好的,它利用了内置的库,你也可以做它的无点版本

 add1 = map (+1)

事实上,由于主题声明了“递增1”,但没有定义递增1的类型,为了方便访问者,让我们给出一个将任何函子递增1的解决方案,当然包括列表类型

列表函子

*Main> fmap (+1) [1,2,3]
[2,3,4]
可能是函子(
id
应用于

任一函子(
id
适用于

IO函子

*Main> fmap ((+1) . read) getLine
2017
2018

用于学习Haskell。根据
map
concat
等重写列表理解通常会使代码更加清晰。这是一个“给我一个codez答案”(好吧,好吧,你已经编辑得不多了)…我认为,如果答案更详细地说明此解决方案中的情况,对OP和未来的用户都会更有利。请记住,尽管它对您来说可能微不足道,但OP显然是一个初学者,可能需要明确指出和解释许多“明显”的事情。是的!我是一个乞丐!谢谢您或者是帮助。显然,列表操作在很多地方都有描述,所以我不认为有必要重新发明。如果你在问问题,有人会给出答案。我认为这就是它的工作原理。如果OP不了解列表是什么以及列表上有哪些操作可用,那么就不需要复制粘贴整本手册。@jdevelop,在这样一个简单的问题上,我同意。对于稍微复杂但仍然是初学者的答案,我决定给他们一个提示,帮助他们解决眼前的困难,但仍有更多的工作要做。这将帮助他们将答案内在化,并将其构建到他们的概念框架中。
*Main> fmap (+1) (Right 2)
Right 3
*Main> fmap ((+1) . read) getLine
2017
2018