タグ

foldに関するkiyo_hikoのブックマーク (22)

  • Perl の reduce (List::Util) で配列を作る方法 | フッ君の日常

    SICP の2.2.3節あたりを読んでいたら、思いついたのでメモ。 いままで reduce で配列を作る方法がいまいち分かってなかったんだけど、以下のようにすればいい。 例えば、1から3までの数字について、元の数字とその数字を2乗した数の対の配列を作る場合はこう。 my @array = 1 .. 3; my $array_ref = reduce { [ @{$a}, [ $b, $b**2 ] ] }[], @array; print YAML::Dump($array_ref); 実行結果 --- - - 1 - 1 - - 2 - 4 - - 3 - 9 初期値に空の配列リファレンスを入れておいてやるのが(個人的な)ポイント。 Perl の(というより List::Util の)reduce は初期値を設定できなくて使いづらいと思ってたんだけど、ただ単に、配列の先頭に初期値を突っ込

    Perl の reduce (List::Util) で配列を作る方法 | フッ君の日常
    kiyo_hiko
    kiyo_hiko 2011/10/29
    これ、やろうとして失敗してた。{[@{$a},$f->($b)]}なるほど。Perlのリスト連結とかはまだ若干苦手だ。pushとかすれば一発なのであんまり考えたことなかった。関係ないが配列の長さ思い付いたのでおまけ length=reduce{$a+1} 0,@xs
  • 途中脱出のある反復計算 - HaHaHa!

    そのまえに もとネタは[id:Dekosuke:20100810]「breakのあるfor文をHaskellで書きなおす」という記事です. この記事に対して,直感的に[id:nobsun:20100118]の双方向畳み込みfoldで汎用的に表現できる」と思って,コメントを付けました.ところが,その後が波瀾万丈 < 大袈裟なやつ 途中脱出の例題を考えてみた. ちゃちゃっと書いたサンプルコードが途中脱出してくれない. あわてて取り消しのコメントを. どうも原因がよくわからない,上手くいくはずなのに. foldの定義の所為だと思い込む. 何人かにfoldを説明してみた. coolじゃないfoldの代替定義をでっちあげた. 代替foldリファクタリング. 代替foldを何人かに説明してみた. 代替foldでよいことは納得できる. でもやっぱり,元のfoldで上手くいかなり理由がわからない. よくよ

    途中脱出のある反復計算 - HaHaHa!
    kiyo_hiko
    kiyo_hiko 2011/01/12
    例えば「&&」のループを抽象化して「(and '(t t t nil t nil nil))」場合。CLの場合は短絡で抜けるが、Haskellの場合。