List 检查列表中的所有项目
此功能的结果:List 检查列表中的所有项目,list,haskell,List,Haskell,此功能的结果: list = [x*x | x <- [0..100]] res = id . filter (\(x,y,sum) -> sum > 9) . takeWhile (\(x,y,sum) -> sum < 100) . nub $ [(x, y, (sqrt (x) + sqrt (y))) | x <- list, y <- list] list=[x*x | x sum>9) .takeWh
list = [x*x | x <- [0..100]]
res = id
. filter (\(x,y,sum) -> sum > 9)
. takeWhile (\(x,y,sum) -> sum < 100)
. nub
$ [(x, y, (sqrt (x) + sqrt (y))) | x <- list, y <- list]
list=[x*x | x sum>9)
.takeWhile(\(x,y,sum)->sum<100)
.努伯
$[(x,y,(sqrt(x)+sqrt(y))|xtakeWhileAtakeWhile::(A->Bool)->[A]-[A]是罪魁祸首,因为在某一点上,总和>100,然后列表被切断
是一个函数,正如名字所说,它在条件成立时接受元素。从一个这样的元素失败的那一刻起,列表的其余部分就不再发出,不管它是否产生有价值的数据
由于您的列表
是有限的,并且您对所有配置都感兴趣,因此您不必在此处使用takeWhile
,您可以使用过滤器
,因此:
res = id
. filter (\(x,y,sum) -> sum > 9)
. filter (\(x,y,sum) -> sum < 100)
. nub
$ [(x, y, (sqrt (x) + sqrt (y))) | x <- list, y <- list]
接下来,只要值的平方根小于100,我们将取值:
where sq100 = takeWhile (\(r,_) -> r < 100) squares
其中sq100=takeWhile(\(r,\)->r<100)正方形
现在,我们可以使用列表理解,计算两个列表的平方根和平方,并计算平方根之和,使之大于9,小于100。我们可以这样写:
res = [ (x,y,sqq) | (sqx,x) <- sq100, (sqy,y) <- sq100, x <= y,
let sqq = sqx+sqy, sqq > 9, sqq < 100 ]
where sq100 = takeWhile (\(r,_) -> r < 100) squares
res=[(x,y,sqq)|(sqx,x)AtakeWhile::(A->Bool)->[A]->[A]
是一个函数,正如名字所说,它在条件成立时接受元素。从一个这样的元素失败的那一刻起,列表的其余部分就不再发出,不管它是否产生有价值的数据
由于您的列表
是有限的,并且您对所有配置都感兴趣,因此您不必在此处使用takeWhile
,您可以使用过滤器
,因此:
res = id
. filter (\(x,y,sum) -> sum > 9)
. filter (\(x,y,sum) -> sum < 100)
. nub
$ [(x, y, (sqrt (x) + sqrt (y))) | x <- list, y <- list]
接下来,只要值的平方根小于100,我们将取值:
where sq100 = takeWhile (\(r,_) -> r < 100) squares
其中sq100=takeWhile(\(r,\)->r<100)正方形
现在,我们可以使用列表理解,计算两个列表的平方根和平方,并计算平方根之和,使之大于9,小于100。我们可以这样写:
res = [ (x,y,sqq) | (sqx,x) <- sq100, (sqy,y) <- sq100, x <= y,
let sqq = sqx+sqy, sqq > 9, sqq < 100 ]
where sq100 = takeWhile (\(r,_) -> r < 100) squares
res=[(x,y,sqq)|(sqx,x)现在它使用x=0和y=0..99,我希望它在x=0..99和y=0..99时打印结果,只需要最后一行中最外面的一对圆括号。id
也不是必需的,因为它是标识函数。另外,我很确定nub
也不是必需的。在中转换takeWhile
如果a==sqrt(b)
,这不是意味着a*a==b
?如果n==sqrt(x*x)
,这不是意味着n==x
?如果p+q>9
,这不是意味着q>9-p
?如果p+q<100
,这不是意味着q<100-p
?使用过滤器而不是take当修复它时,谢谢你现在它与x=0和y=0..99一起工作,我只想在x=0..99和y=0..99时打印结果最后一行中最外面的一对圆括号是必需的。id
也不是必需的,因为它是标识函数。另外,我很确定nub
也不是必需的。将takeWhile
转换为过滤器。a==sqrt(b)
,它不是意味着a*a==b
?如果n==sqrt(x*x)
,它不是意味着n==x
?如果p+q>9
,它不是意味着q>9-p
?如果p+q<100
,它不是意味着q<100-p
?使用过滤器代替take,同时修复它,谢谢