gpt4 book ai didi

Haskell 列表理解创建函数

转载 作者:行者123 更新时间:2023-12-02 10:08:58 26 4
gpt4 key购买 nike

我是 Haskell 新手,正在尝试学习基础知识。我很难理解如何操作列表的内容。

假设我有以下列表,我想创建一个函数来从列表中的每个元素中减去 1,我可以简单地将 x 传递给函数,这将如何完成?

Prelude>let x = 1:2:3:4:5:[]

类似于:

Prelude>subtractOne(x)

最佳答案

(您可以将 1:2:3:4:5:[] 更简单地写为 [1,2,3,4,5] 甚至 [1..5] 。)

推导式​​

您想使用列表推导式,所以这里是:

subtractOne xs = [ x-1 | x <- xs ]

这里我使用xs代表我要从中减去一个的列表。

首先要注意的是x <- xs您可以将其读作“x 取自 xs ”。这意味着我们将采用 xs 中的每个数字。依次,每次我们都会调用号码 x .

x-1是我们为每个 x 计算并返回的值。

有关更多示例,这里是为每个元素加一的示例 [x+1|x<-xs]或对每个元素进行平方 [x*x|x<-xs] .

多个列表

让我们进一步了解列表理解,编写一个函数来查找我们给它的数字的平方,然后是立方,所以

> squaresAndCubes [1..5]
[1,4,9,16,25,1,8,27,64,125]

我们需要

squaresAndCubes xs = [x^p | p <- [2,3], x <- xs]

这意味着我们拥有权力p为 2,然后为 3,对于每个幂,我们取所有 x来自 xs ,并计算x给电源p (x^p)。

如果我们反过来做会发生什么?

squaresAndCubesTogether xs = = [x^p | x <- xs, p <- [2,3]]

我们得到

> squaresAndCubesTogether [1..5]
[1,1,4,8,9,27,16,64,25,125]

这需要每个 x然后依次给出它的两个幂。

结论 - <- 的顺序位告诉您输出的顺序。

过滤

如果我们只想允许一些答案怎么办?

2到100之间哪些数字可以写成x^y

> [x^y|x<-[2..100],y<-[2..100],x^y<100]
[4,8,16,32,64,9,27,81,16,64,25,36,49,64,81]

在这里我们允许所有 x以及所有y只要x^y<100

<小时/>

由于我们对每个元素执行完全相同的操作,因此我会在实践中使用 map 来编写此内容:

takeOne xs = map (subtract 1) xs

或更短为

takeOne = map (subtract 1)

(我必须将其称为 subtract 1,因为 - 1 会被解析为负数 1。)

关于Haskell 列表理解创建函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14595135/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com