跳转到内容

Haskell/实验模块/速查表原型 1

来自 Wikibooks,开放世界中的开放书籍

速查表

[编辑 | 编辑源代码]

该表使用模板构建,以减少繁琐操作。函数名称使用粗体字是一种简单的方法,用于吸引新手关注基本函数(与高级函数形成对比)。要触发粗体字,请将模板的“key”参数设置为非空值。

将最后一列命名为“计算结果”非常巧妙,因为这样条目可以非常简短。虽然不总是有效,但我喜欢它。 -- apfeλmus 2010年5月15日 (UTC) 19:15

我们可以从Prelude 文档中获取分类等信息。

列表操作
名称 类型签名 计算结果 示例
基本函数 - 基础
head­ :: [a] -> a 列表的第一个元素。 head [1,2,3] = 1
tail :: [a] -> [a] 第一个元素之后的所有元素。 tail [1,2,3] = [2,3]
last :: [a] -> a 最后一个元素。 last [1,2,3] = 3
init :: [a] -> [a] 最后一个元素之前的全部元素。 init [1,2,3] = [1,2]
null :: [a] -> Bool 列表是否为空。 null ['a','x'] = False null [] = True
length :: [a] -> Int 元素数量。 length [True,False] = 2
(!!) :: [a] -> Int -> a 给定位置的元素,从 0 开始 [4,5,6] !! 1 = 5.
reverse :: [a] -> [a] 反序排列的元素。 reverse [1,2,3] = [3,2,1]
map :: (a -> b) -> [a] -> [b] 将函数应用于每个元素。 map f [1,2,3] = [f 1, f 2, f 3]
filter :: (a -> Bool) -> [a] -> [a] 仅返回满足谓词的元素。 filter odd [1..7] = [1,3,5,7]
(++) :: [a] -> [a] -> [a] 追加两个列表。 [1,2] ++ [3,4] = [1,2,3,4]
[] :: [a] 空列表。 []
(:) :: a -> [a] -> [a] 前置一个元素。 [1,2,3] = 1:(2:(3:[]))
折叠和扫描 - 高级
foldl :: (a -> b -> a) -> a -> [b] -> a 从左到右折叠
foldl1 :: (a -> a -> a) -> [a] -> a 从左到右折叠,使用第一个元素初始化
scanl :: (a -> b -> a) -> a -> [b] -> [a] 部分从左到右折叠的列表
scanl1 :: (a -> a -> a) -> [a] -> [a] 部分从左到右折叠的列表,使用第一个元素初始化
foldr :: (a -> b -> b) -> b -> [a] -> b 从右到左折叠
foldr1 :: (a -> a -> a) -> [a] -> a 从右到左折叠,使用第一个元素初始化
scanr :: (a -> b -> b) -> b -> [a] -> [b] 部分从右到左折叠的列表
scanr1 :: (a -> a -> a) -> [a] -> [a] 部分从右到左折叠的列表,使用第一个元素初始化

一般说明

[编辑 | 编辑源代码]

这里我们可以对这些函数进行一些一般的讨论。但是,在我看来,一般性评论更适合放在实际的“构建词汇表”模块中,而速查表页面则作为单独的附录,链接到书籍的主体部分。

函数说明

[编辑 | 编辑源代码]

更详细的说明。表中的自动生成的超链接指向此处的三级标题。

我不知道在注释部分重复表格中的信息是否是一个好主意。如果我们选择这样做,也可以使用模板来帮助格式化。

类型签名

[a] -> a

描述

计算给定列表的第一个元素。

其他说明

如果应用于空列表,则会触发错误。

类型签名

[a] -> [a]

描述

计算通过删除参数的第一个元素获得的列表。

其他说明

如果应用于空列表,则会触发错误。计算结果[]如果列表只有一个元素。

华夏公益教科书