barutanGNE's blog

kindleで読んだ本の感想や、プログラミングに関する記事など。

HaskellとPythonで階差数列

Haskell

Prelude> let diff ls = zipWith (-) (tail ls) ls
Prelude> diff [1,2,3,4,5]
[1,1,1,1]
Prelude> diff [x^2 + x -1 | x <- [0..10]]
[2,4,6,8,10,12,14,16,18,20]

Python

>>> f = lambda a, b: a-b
>>> diff = lambda ls: map(f, ls[1:], ls)
>>> ls1 = diff([1,2,3,4,5])
>>> list(ls1)
[1, 1, 1, 1]
>>> ls2 = diff([x*x + x -1 for x in range(11)])
>>> list(ls2)
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

応用で、数列が単調増加(減少)しているか、とかも割りと簡潔に書ける。

で、そういえば、階差数列っていつ役に立つの?