タグ

reduceとlispに関するkiyo_hikoのブックマーク (2)

  • 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を何回も呼ぶのか
  • 畳み込み関数の比較 (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++のなんでもありさすごい
  • 1