top page > computer > haskell > web_lecture > for_programmer > repeat_def.html
更新日:
文責: 重城良国

関数repeat, replicate, cycle

repeats.hs

関数repeat

動作

同じ要素から成る無限リストを作る。

% ghci
Prelude> take 100 $ repeat "I love you!"
["I love you!","I love you!",...,"I love you!"]

"I love you!"の無限リストから100とりだした。

repeatRaw, repeatI :: a -> [a]

生の再帰

xを無限にくりかえすにはxを無限にくりかえしたリストにxを追加する。

repeatRaw x = x : repeatRaw x

関数iterate

関数iterateを使って定義すると

repeatI = iterate id

となる。

関数replicate

動作

指定した回数だけ同じ要素をくりかえす。

Prelude> replicate 100 "I love you!"
["I love you!","I love you!",...,"I love you!"]

"I love you!"を百回くりかえした。

replicateRaw, replicateT :: Int -> a -> [a]

生の再帰

xをn回くりかえすにはxをn - 1回くりかえしたリストの先頭にxを追加する。

replicateRaw n x | n > 0 = x : replicateRaw (n - 1) x
replicateRaw _ _ = []

関数take

関数takeとrepeatを使うと

replicateT n = take n . repeat

となる。

関数cycle

動作

指定された並びをくりかえすリストを作る。

Prelude> take 100 $ cycle "I love you!"
"I love you!I love you!I love you!...I love you!I"

cycleRaw, cycleC :: [a] -> [a]

生の再帰

xsを無限にくりかえすリストにxsを結合する。

cycleRaw xs = xs ++ cycleRaw xs

関数concat

repeatしてconcatする。

cycleC = concat . repeat

まとめ

要素をくりかえす関数repeat, replicate, cycleを学んだ。

「関数(++), concat, reverse」へもどる 「関数concatMap」へ

正当なCSSです! HTML5 Powered with CSS3 / styling, and Semantics