タグ

関連タグで絞り込む (1)

タグの絞り込みを解除

Arrowに関するyuroyoroのブックマーク (2)

  • Control.Arrowでエラトステネスの篩, 階乗 - プログラムモグモグ

    エラトステネスの篩の前に, 階乗をArrowでやります. 理由はおいおい分かります. 階乗を普通に fact n = if n == 0 then 1 else n * fact (n - 1) main = print $ fact 10 3628800 流石にこれはいいですね. はい. Arrowに急ぐ前に, まずfixを使って書きましょう. 色々考えましたが, fixを介してArrowに行くのが一番近道です. fix f = f (fix f) fact = fix fact' fact' f n = if n == 0 then 1 else n * f (n - 1) main = print $ fact 10 3628800 さっきのfactを, 第一引数で関数を回すようにしてやるだけですね. 階乗をArrowLoopで さて, fixで書けたらもうお手の物です. というのも

    Control.Arrowでエラトステネスの篩, 階乗 - プログラムモグモグ
  • mad日記 - Arrowパズル解答 (とArrowLoop解説)

    まず最初にArrowLoopについて説明します。数学的な話は一切しません(できません)。 ArrowLoopの仕組み ArrowLoopというクラスにはloopという関数が一つだけ属しています。このloopはArrowから新しいArrowを作り出してくれる関数です。 まずloopに入れるArrowはこんな形をしています。 入力が2つあり、出力も2つあります。ただし、Arrowは入力と出力がどちらも1つずつでなければならないので実際はタプルとして入出力します。標準ライブラリで定義されているArrowLoopクラスのインスタンスには普通の関数と、モナドをArrow化したKleisliというArrowがあります。 ここでは例として次のArrowを考えます。 swap_mul = \(x, y) -> (2 * y, 3* x) 実行例 > swap_mul (3, 4) (8,9)簡単な関数です

    mad日記 - Arrowパズル解答 (とArrowLoop解説)
  • 1