小编mat*_*tic的帖子

Haskell - 在列表中累计的总和

我需要创建或知道Haskell中是否有一个函数允许您从列表中添加项目.所以,例如:

cumulativeAmount :: [Integer] -> [Integer]

cumulativeAmount [1,2,5,8,8,0,4,2] = [1,3,8,16,24,24,28,30]

cumulativeAmount [1,4,7,0,5] = [1, 1+4, 1+4+7, 1+4+7+0, 1+4+7+0+5] = [1,5,12,12,17]
Run Code Online (Sandbox Code Playgroud)

我尝试使用mapscanl函数,但我没有得到我想要的东西,因为我添加了所有元素.

haskell functional-programming list cumulative-sum

3
推荐指数
1
解决办法
374
查看次数

无限列表中的周期性(Fibonacci mod序列)Haskell

我需要在Haskell中创建一个函数,其工作方式如下

periodicity ::[Integer] ->[Integer]
periodicity [1,2,3,3,4,1,2,3,3,4...] = [1,2,3,4]
periodicity [0,1,2,2,5,4,3,3,0,1,2,5,4...] = [0,1,2,5,4,3]
Run Code Online (Sandbox Code Playgroud)

也就是说,从列表中你得到的部分总是重复,数学科学中的部分将被称为函数的周期.

我已经尝试过这个,但是因为我想要与无限列表一起工作,我没有像我想要的那样工作

periodicty :: Eq a => [a] -> [a]
periodicity xs = take n xs
    where l = length xs
          n = head [m | m <- divisors l, 
                        concat (replicate (l `div` m) (take m xs)) == xs]
Run Code Online (Sandbox Code Playgroud)

我发现这个函数给了我句号的长度,我本可以解决问题,但我不明白代码在哪里:

periodo 1 = 1
periodo n = f 1 ps 0
  where
   f 0 (1 : xs) pi = pi
   f _ (x : xs) pi = …
Run Code Online (Sandbox Code Playgroud)

haskell

2
推荐指数
1
解决办法
102
查看次数

从列表列表中筛选列表

在Haskell中,我有以下问题:

toBin :: Integer -> Integer
toBin n = read (showIntAtBase 2 intToDigit n "")

-- ?> toBin 558745840
-- 100001010011011100100011110000
-- (0.01 secs, 117,680 bytes)

digitosAgrupados :: Integer -> [[Integer]]
digitosAgrupados n = group [read[d] | d <- show n]

-- ?> digitosAgrupados (toBin 558745840)
-- [[1],[0,0,0,0],[1],[0],[1],[0,0],[1,1],[0],[1,1,1],[0,0],[1],[0,0,0],[1,1,1,1],[0,0,0,0]]
-- (0.01 secs, 288,624 bytes)
Run Code Online (Sandbox Code Playgroud)

我必须删除那些来自的列表 digitosAgrupados n

[[1],[0,0,0,0],[1],[0],[1],[0,0],[1,1],[0],[1,1,1],[0,0],[1],[0,0,0],[1,1,1,1],[0,0,0,0]] --> [[0,0,0,0],[0],[0,0],[0],[0,0],[0,0,0],[0,0,0,0]]
Run Code Online (Sandbox Code Playgroud)

也就是说,从一个由零和一个零的列表组成的列表中,提取一些列表.我试过了 filter (all odd) xss

haskell functional-programming

0
推荐指数
1
解决办法
342
查看次数