如何在haskell中筛选列表并取出平方数

如何在haskell中筛选列表并取出平方数,haskell,Haskell,假设我们有一个列表,我们只想从列表中取出一个平方数 isSquare :: Int -> Bool isSquare n = truncate(sqrt(x)) * truncate(sqrt(x)) == n where x = fromIntegral n squareTriSemi = filter (isSquare) triSeries 下面是三序列的定义 triSeries 0 = [0] triSeries n = map triangular $ta

假设我们有一个列表,我们只想从列表中取出一个平方数

isSquare :: Int -> Bool
isSquare n = truncate(sqrt(x)) * truncate(sqrt(x)) == n
         where x = fromIntegral n


squareTriSemi = filter (isSquare) triSeries
下面是三序列的定义

triSeries 0 = [0]
triSeries n = map triangular $take n $iterate (+1) 1
where triangular x = x * (x + 1) `div` 2
但它没有编译它这样抱怨

Couldn't match expected type `[Int]' with actual type `Int -> [t0]'
    In the second argument of `filter', namely `triSeries'
    In the expression: filter (isSquare) triSeries
    In an equation for `squareTriSemi':
        squareTriSemi = filter (isSquare) triSeries
有什么帮助吗?

您对triSeries的定义采用Int并返回一个列表。也就是说,triSeries本身不是一个列表,但是像triSeries 10这样的表达式是一个列表

修复squareTriSemi定义的一种方法是添加一个传递给triSeries的参数:

您对triSeries的定义采用Int并返回一个列表。也就是说,triSeries本身不是一个列表,但是像triSeries 10这样的表达式是一个列表

修复squareTriSemi定义的一种方法是添加一个传递给triSeries的参数:


记住,你可以用特殊按钮接受工作答案。记住,你可以用特殊按钮接受工作答案。
squareTriSeries n = filter isSquare (triSeries n)