gpt4 book ai didi

haskell - 在haskell的列表理解中使用条件

转载 作者:行者123 更新时间:2023-12-01 08:07:41 25 4
gpt4 key购买 nike

我想使用列表理解只打印 true

listTo::(a->b)->[a]->[b]
listTo f list=[f(x)|x<-list,x==True]

isTrue::Int->Bool
isTrue n
|n>=5 =True
|n<5 =False


listTo isTrue[1,2,3,4,5,6,7]

但这不起作用。为什么?

最佳答案

[f(x)|x<-list,x==True]

这说“给我一个 f x 1 的列表,其中 x 来自 list 并且 x 等于 True

但是对于您的情况,您已将 list 作为数字列表传递。看起来您只想包含 f x 返回 True 的那些数字。因此,与其将 xTrue 进行比较并发出 f x ,不如做相反的事情。更像是:
[x | x <- list, f x == True]

但是我们可以进一步改进这一点。 == 是一个函数,它接受两个参数,如果相等则返回 True,如果不相等则返回 False。因此,如果 f x == TrueTrue ,则 f x 将返回 True ,如果 Falsef x ,则返回 False 。似乎是白费力气;你可以写 f x !
[x | x <- list, f x]

这就是你如何使用列表理解来做到这一点。但正如 postman 所指出的,已经有一个标准库函数可以做到这一点: filter 。如果您正在编写代码来完成工作,而不是学习事情是如何工作的,那么这就是您将使用的内容。

1 请注意, f(x) 只是被解析为 f 应用于带括号的子表达式 (x) 。将括号放在 x 周围没有任何作用,所以这完全等同于 f x 。 Haskell 的函数应用语法是 不是 类似 C 的 function(arg1, arg2, arg3) ,而是 function arg1 arg2 ,其中参数简单地写在函数之后(必要时用空格分隔)。括号仅用于控制优先级和形成元组。如果您开始尝试通过在参数列表周围放置括号来调用多个参数的函数,您将遇到更多错误。

关于haskell - 在haskell的列表理解中使用条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16194246/

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