タグ

reduceに関するkiyo_hikoのブックマーク (19)

  • ソースコードの減らし方 - 基本的な考え方と10個の方法 - クラウドワークス エンジニアブログ

    ステップ数で評価が決まる現場では全く役に立たないテクニックではありますが、ソースコードの減らし方について紹介したいと思います。 開発Div. エンジニアのayasudaです。 2014年の夏にジョインし、会社名と同じサービス、クラウドワークス の開発に携わっています。 ご覧の通り、消したソースコードの方が多いので、ステップ数換算だとマイナスの働きしかしてませんね! 記事では、特に Ruby on Rails の運用されているプロダクトコードにおける、ソースコードの減らし方について紹介していこうと思います。 基的な考え方 ソースコードを減らすときの大原則は「ボーイスカウト・ルール - プログラマが知るべき97のこと」です。 普段、ソースコードを触るときに、一つでも良いので簡単な改善を入れる。これを積み重ねるのが大事です。 一度に一気に直そうとするのはあまり良くありません。大抵の場合、デグ

    ソースコードの減らし方 - 基本的な考え方と10個の方法 - クラウドワークス エンジニアブログ
    kiyo_hiko
    kiyo_hiko 2016/03/11
    "おすすめなのは、「将来削除する旨を記したコメント」と、参照されたらログを吐いておくという手法です。"
  • 復習 Ruby: [1, 2, 3].sum ではなく,[1, 2, 3].inject(:+) と書く.

    復習 Ruby: [1, 2, 3].sum ではなく,[1, 2, 3].inject(:+) と書く. 数値が Array に格納されていて,その合計を計算したいときに sum したくなることがある. たとえば,次のように. a = [1, 2, 3] a.sum # ~> -:2:in `': undefined method `sum' for [1, 2, 3]:Array (NoMethodError) しかし,このように,Array#sum というメソッドは無いので,NoMethodError になる. Enumerable#inject(symbol)こんなときに,Ruby なら Enumerable#inject(symbol) を使う. a = [1, 2, 3] a.inject(:+) # => 6 ここで,a.inject(:+) は, 1 + 2 + 3 と同じ

    復習 Ruby: [1, 2, 3].sum ではなく,[1, 2, 3].inject(:+) と書く.
    kiyo_hiko
    kiyo_hiko 2015/11/12
    injectの別名で>>とか->的なものがあればナイスそうな気がした
  • Generic Map/Reduce List Extensions in C#

    kiyo_hiko
    kiyo_hiko 2015/07/28
    Enumerable.Range(1, 100).Aggregate(0, ((a, b) => a + b)).Dump();
  • C# で map とか reduce みたいな楽しいリスト操作をしたい

    プログラミング言語がロジックを組むのに向いているかいないかを判断するときの基準に、私はよく「文字列の操作が優れているか否か」「配列・辞書・集合の操作が優れているか否か」を評価点に挙げます。文字列や配列、辞書、集合の操作はほとんどすべてのアプリケーションで必要になり、それらの生産性が高く高速に処理してくれる言語ほど簡単で高速なロジックが組めると思うからです。 そういう意味でObjective-Cを考えると、文字列の操作はまぁまぁ良い(特にUnicode周りがなかなか優れている、正規化もできるし)のですが、配列・辞書・集合の操作がイマイチで、作るの面倒なら操作するのも面倒。さらには良く欲しくなる以下の操作が欠けています。map - 条件式を渡して、もとの集合の各要素に条件式を通した結果を新たな集合として返す。 reduce - 条件式を渡して、要素を前から順番に計算して畳み込み、集合から一つの

    kiyo_hiko
    kiyo_hiko 2015/07/15
    Xs.Aggregate(F, S => F ⊕ S);
  • VBA ちょっとスッキリ(Mapなど) - 定時にカエルVBA

    2015-03-30 VBA ちょっとスッキリ(Mapなど) Mapなどの記述を少しだけ簡略化したよ、というはなし 前回ブログに書いたMapなどの記述ですが、正直どうにかならないかなーと ビールを飲みながら考え、どうにかできました!まぁ、当にすこしですが(汗) でも前より全然いいはずっ! コード比較 '前回のバージョン Set MapAdd1 = Map.Bind(Fun1(AddressOf Add1)) . '今回改良バージョン Set MapAdd1 = Map.Bind(AddressOf Add1) 仕組み Map, Filter,Zip, Fold, Scan, Unfold, GroupByの7種類の関数に 関してはあらかじめインターフェース関数をPartialクラスで準備しておきます。 ということは裏を返すと上記以外は自前で用意しなければいけないです。 'Part

    VBA ちょっとスッキリ(Mapなど) - 定時にカエルVBA
  • apply と reduce を賢く使い分ける. - tnoda-clojure

    apply と reduce と交換可能な場合にどちらを使うかは,直感で決めればいいと思います. #mitori_clj での議論Clojure 入門者向け勉強会 #mitori_clj で分担して Project Euler の問題を題材にしているのですが, 最初の Problem 1 から参加者コメントが多数寄せられ, 期待していたより面白い勉強会になっています. そんなコメントの中に, 可変長引数を取ることのできる関数に reduce と apply のどちらを使うかは悩みますね。 とか, apply + か reduce + かは, 宗教戦争になりかねないので, とか, …敢えて宗教戦争に参加すると :-), この場合は apply + の方が抽象的で良いと思います. とかといった議論がありました. Project Euler Problem 1さて,どうしてこのような議論になった

    apply と reduce を賢く使い分ける. - tnoda-clojure
    kiyo_hiko
    kiyo_hiko 2014/01/29
    これは疑問だった。reduceだとアリティ2の演算を繰り返すからシーケンスの長さに応じた分だけfを何回も呼ぶのか
  • HTTPリクエスト数削減テクニック2: CSS Sprite編

    はじめに こんにちは、クラスメソッド株式会社の野中です。 HTTPリクエスト削減テクニックの紹介に入り、前回の『リクエスト数削減テクニック1:インラインイメージ編』では、インラインイメージについて紹介しました。記事では「CSS Sprite」の基的な知識と使い方、使いどころについて解説します。すでに定番のテクニックとなっていますが、何となく使っていることが多いと思います。初学者の方にも理解していただけるよう詳しく解説します。 対象者 対象者は主にコーダー、フロントエンドエンジニアです。 デザインとコーディングを合わせて担当するWebデザイナーも対象です。 コーダー・フロントエンドエンジニア Webデザイナー Webディレクター Web担当者 CSS Spriteとは Webサイトではアイコンやナビゲーションなどに多くの画像が使われ、サイトによっては20個30個とたくさんのアイコンが使わ

  • Java8のStreamを使いこなす - きしだのHatena

    さて、Java8で関数型っぽいことをやって遊んでみたわけですが、実際はそんな書き方しませんよね。 Java8で実際に使うのは、Streamです。 ということで、Streamの使い方をひととおり見てみます。 ※5/17 仕様変更があったので、修正しました 基 まずは、Iterableインタフェースに用意されたforEachメソッドを見てみましょう。 List<String> names = Arrays.asList("hoge hoge", "foo bar", "naoki", "kishida"); names.forEach(s -> System.out.println(s)); これで次のように表示されます。 hoge hoge foo bar naoki kishida いままでの拡張forだと次のように書いてました List<String> names = Arrays.a

    Java8のStreamを使いこなす - きしだのHatena
  • 2.1 組み込み関数

    Python インタプリタは数多くの組み込み関数を持っていて、いつでも利用 することができます。それらの関数をアルファベット順に挙げます。 この関数は import 文によって呼び出され ます。この関数の主な意義は、同様のインタフェースを持つ関数で この関数を置き換え、import 文の意味を変更できるように することです。これを行う理由とやり方の例については、標準ライブラリ モジュール ihooks および rexec を読んで下さい。また、 組み込みモジュール imp についても 読んでみて下さい。自分で関数 __import__ を構築する 際に便利な操作が定義されています。 例えば、文 "import spam" は結果として以下の呼び出し: __import__('spam', globals(), locals(), [], -1) になります; 文 "from spam.ha

    kiyo_hiko
    kiyo_hiko 2013/06/28
    このall/anyは(and p q ...)とか(or p q ...)的に、単純にboolに評価できるものを取るのかな参考にする 短絡要らない2項演算をまとめるのはreduceでよさそうね
  • Array.prototype.reduce() - JavaScript | MDN

    reduce() メソッドは、配列の各要素に対して (引数で与えられた) reducer 関数を実行して、単一の出力値を生成します。 このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、https://github.com/mdn/interactive-examples をクローンしてプルリクエストを送信してください。 reducer 関数は 4 つの引数を取ります。 アキュムレーター (acc) 現在値 (cur) 現在の添字 (idx) 元の配列 (src) reducer 関数の返値はアキュムレーターに代入され、配列内の各反復に対してこの値を記憶します。最終的に単一の結果値になります。 構文 arr.reduce(callback( accumulator, currentValue[, index[, array]] ) {

    Array.prototype.reduce() - JavaScript | MDN
    kiyo_hiko
    kiyo_hiko 2012/07/13
    reduceのアルゴリズム / 書いた。あとで確認。メモ 「(defun reducex (fun x xs) (if (null xs) x (reducex fun (fun x (car xs)) (cdr xs))))」
  • Google Sites: Sign-in

    Not your computer? Use a private browsing window to sign in. Learn more about using Guest mode

    kiyo_hiko
    kiyo_hiko 2012/07/02
    畳み込みの各言語での比較
  • 癌患者に朗報!!! “癌による疲労感”を劇的に軽減させるミラクル食材が全米調査で判明 | IRORIO(イロリオ) - 国内・海外ニュースで井戸端会議

    朝鮮人参が健康に良いというのは周知の事実だが、今回新たに癌による倦怠感を軽減させるという効能が加わることになりそうだ。 全米40か所の医療機関に於いて、340人の癌患者を対象に高用量の朝鮮人参を2カ月間服用したもらったところ、プラシーボ(偽薬)以上の効果があったという。 対象患者の一方には偽薬を、もう一方には2,000ミリグラムの朝鮮人参の粉末入りカプセルを毎日服用してもらった。米メイヨ・クリニックのデブラ・バートン医師によると、投与後2カ月経つと効果の差は歴然で、朝鮮人参を服用した患者はだるさや疲れが軽くなったと口を揃えたという。 朝鮮人参に含まれるジンセノサイドという成分には免疫力を高め、ストレスホルモンを抑える働きがあり、中国では昔から強壮剤として使用されてきた。広く大勢の人を対象とした今回の調査で、これまで指摘されてきた朝鮮人参の効果が実証されたというわけだ。出典元:Ginseng

    kiyo_hiko
    kiyo_hiko 2012/06/10
    不幸にもがんになったら朝鮮人参に挑戦
  • join

    #!/usr/bin/perl use strict; use warnings; my @items = (1, 2, 4, 8, 16, 32); my $str = join ',', @items; print $str, "\n"; #!/usr/bin/perl use strict; use warnings; my @items = (1, 22, 333, 4444, 55555); my $str = join "\n", @items; print $str, "\n";

    join
    kiyo_hiko
    kiyo_hiko 2012/03/23
    Reduce使って書けるということを徒然なるままに思いついた だからなんだというわけでもない 「use List::Util qw/reduce/; sub joint {my ($glue, @xs) = @_; reduce {"$a$glue$b"} @xs} print joint ', ', qw/a quick brown fox jumps over a lazy dog./」
  • LISPMEMO

    LISPUSERLISPMEMOLisp is like a ball of mud - you can throw anything you want into it, and it's still Lisp. -- Anonymous 404 Blog Not Found:Code Snippets - reduce(l|r)を実装汁! ネタ。 Common Lisp には標準であったので話にならなかった。10 分を切れてよかった。 (defun reducel (fn lst) (reduce fn lst)) (defun reducer (fn lst) (reduce fn lst :from-end t)) つまらないので Prolog 版。うむ、やっぱり Prolog はいい。call で高階関数も使えるし(funcall が許せない人には不評かもしれないが)。 % red

  • sirocco の書いてもすぐに忘れるメモ

    2014-07-26 Python: wxFormbuilder を使ってwxPythonアプリを作る。 Python wxPython wxFormBuilder PythonwxPythonGUIビルダwxFormBuilderを使って、テストアプリを作ってみました。 なぜ、wxPython なのか。 wxWidgets を使っていますので、WindowsmacOSLinux で動かすことが出来るからです。 【環境】 Python 2.7.8 wxPython 2.8 wxFormbuilder 3.… 2014-07-25 Python: win32com を使ってDBにADO接続してみる。 Python MS-Windows COM SQL server Python and ActiveX Data Objects (ADO)を参考にMS AccessのMDBにアクセスし

    sirocco の書いてもすぐに忘れるメモ
    kiyo_hiko
    kiyo_hiko 2011/10/29
    consの逆関数snoc
  • 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
  • 畳み込み関数の比較 (fold / accumulate / inject / reduce) - blanket log

    つーか、fold の弱点として、言語によって引数の順番がまちまちで、 正直憶えきれないってのがあるんだよな。誰か対応表とか作ってくれんもんか。 jijixi's diary - fold, map, for-each この中から一つ選ぶとしたらどれ? 確かにいろいろとややこしいのでまとめてみました。 いくつかの言語について大雑把に表にすると次のような感じ。 言語 関数 Haskell, OCaml, Scheme, Erlang foldl* f init items C++ accumulate(begin, end, init, f) Ruby*, JavaScript items.inject(init, f) Python, Perl* reduce(f, items [, init]) 言語 畳み込む二項演算 Scheme(SRFI)*, Erlang f(item, acc)

    畳み込み関数の比較 (fold / accumulate / inject / reduce) - blanket log
    kiyo_hiko
    kiyo_hiko 2011/09/24
    C++のなんでもありさすごい
  • reduce だいすき

    デミグラスソース使った料理べたい cho45 です。Perl といえば某MMOゲームと同時に起動できないプログラムとして有名ですが今回はそれとは関係ない話です。 Ruby 厨の多くが inject 厨である気がします (てきとーです) が、 Perl で List::Util::reduce を使っているところをあんまり見たことがないのでいくつか便利な例を紹介します。 reduce は何かというとリストを1つの値に纏めるものです。例えばリストの要素の合計は use Perl6::Say; use List::Util qw/reduce/; my $list = [1, 2, 3, 4, 5]; say reduce { say "$a,$b"; $a + $b } @$list; 1,2 3,3 6,4 10,5 15 前回のループの返り値が $a に入り、$b には残りの要素

    kiyo_hiko
    kiyo_hiko 2011/09/24
    reduce/foldってmap/mapcarとかgrep/remove-if-notとかと比べるとまだ慣れない。使いこなせればめちゃめちゃコードが楽に書けそうな気はするのだがなあ。てかreduceがコアモジュールに入ってたのに驚いた。是非使わねば。
  • 途中脱出のある反復計算 - 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の場合。
  • 1