タグ

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

タグの絞り込みを解除

Perlとモナドに関するneedingyouのブックマーク (4)

  • モナドのdo記法をPerlのCoroで実装してみた - Pixel Pedals of Tomakomai

    先に言っときますが、決して役に立つエントリではないので圏論やコルーチンみたいなものに興味がある人だけどうぞw PythonにおけるHaskellチックなdo記法をジェネレータで実装する方法に心惹かれたので、Perlで真似してみました。 ジェネレータはコルーチン的な振る舞いをするので、PerlではCoroを使うと楽でしょう。以前のエントリで作ったMaybeモナド*1を利用して、以下のようなシンタックスシュガーを作ってみます。 my $may_div = sub { my ($x, $y) = @_; return $y ? just($x / $y) : nothing; }; my $maybe_divs = do_monad { my $v1 = retrieve $may_div->(3.0, 1.0); my $v2 = retrieve $may_div->(2.0, 1.0);

    モナドのdo記法をPerlのCoroで実装してみた - Pixel Pedals of Tomakomai
  • Perlでモナドを学ぶ - Maybeモナド編 - Pixel Pedals of Tomakomai

    Maybeモナドの実装です。 簡単な解説 Maybeモナドの関手のT_objectは、渡された集合に対して、すべてをリファレンス化した集合にundefを加えたものに移します。こうすることによって、元々持っていた値を全て表現すると同時に新しいundefと言う値を手に入れられます。undefがHaskellのNothingとなります。 実装 リファレンスをとる処理がうざかったので、ヘルパー関数にまとめました。こいつの名前をjustにしたので、Haskellっぽくなりました*1。 sub just { my $value = shift; return \$value; } my $list_monad = Monad->new( T_arrow => sub { my $arrow = shift; # A -> B return sub { my $tx = shift; # TA -> T

    Perlでモナドを学ぶ - Maybeモナド編 - Pixel Pedals of Tomakomai
  • Perlでモナドを学ぶ - Pixel Pedals of Tomakomai

    勉強のためにPerlでモナドを実装してみました。 免責 圏論のモナドの概念をPerlでシミュレートしようと言うエントリであって、モナドを開発にどう利用するかなどについてはびっくりするくらい言及しませんので悪しからず。 1. 圏を考える Perlのスカラ値の任意の集合を対象として、引数も戻り値も一つで副作用がないサブルーチンを射とします*1。domとcodについては、関数が正常に動作する範囲で適当にとりましょう。 * 例: 対象「文字列」から対象「整数」への射 length 2. 自己関手の表現 自己関手は、二つの写像からなります。 対象を対象に移す写像 T_object モノとしては考えますけど今回は実装しません*2。 射を射に移す写像 T_arrow 『サブルーチンを受け取ってサブルーチンを返すサブルーチン』として実装できます。 3. 自然変換の表現 関手Tから関手Sの自然変換は、対象A

    Perlでモナドを学ぶ - Pixel Pedals of Tomakomai
  • Monads in Perl

    Monads in Perl Monads in Perl (in the spirit of TMTOWTDI) Haskell is the language that popularized (?!) monads, but my understanding was impeded because of the myriad of new things that I needed to learn about Haskell before I could even get to monads (different syntax, purity/laziness, typing system, significant white-space, etc.) All that added up to something as clear as mud. I needed a Rosetta

  • 1