This questionは、Haskellのscanl
のバージョンをPythonで提供しますが、この関数のRubyバージョンはありますか?おそらく、よりよいバージョンを書くことができHaskellのscanlに相当するRubyとは何ですか?
答えて
が、これは私が思い付いたものです:
require 'spec_helper'
class Array
def scanl accumulator, &block
results = [accumulator] + self
results.each_with_index do |e, i|
results[i] = block.call(accumulator, e)
accumulator = results[i]
end
results
end
end
describe "#scanl" do
it 'is similar to foldl, but returns a list of successive reduced values from the left' do
# example from http://learnyouahaskell.com/higher-order-functions
expect([3, 5, 2, 1].scanl(0, &:+)).to eq([0,3,8,10,11])
end
end
私はもっとreduce
ようになり代わりにブロックの:+
のように、単にメソッド名を取るためにscanl
を変更すると考えました。思考?
ちょっと、パイソンの質問はどうだったのか分かりませんが、私はそれを開いたままにすると私の評判を台無しにするように見えるので、私はこのポストを削除して幸せ。私の意図は、私のように、ルビーのscanlを探してcouldntを見つける次のグーグルーラーを助けることだった –
ここにチャットhttp://chat.stackexchange.com/rooms/8595/the-2nd-monitor。私たちは何かを試すことができると思います –
質問の質を比較するだけです。 –
reduce()
を使用して、自分で実装することができます。
def scanl(op, init, range)
op = op.to_proc unless op.is_a?(Proc)
range.reduce([init]) { |a, e| a.push(op.call(a.last,e)) }
end
p scanl(lambda { |a, b| a + b }, 0, 1..10)
#=> [0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55]
p scanl(:+, 0, 1..10)
#=> [0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55]
また、map()
を使用して、配列の先頭に初期要素を配置することもできます。
def scanl(op, init, range)
op = op.to_proc unless op.is_a?(Proc)
acc = init
range.map { |e| acc = op.call(acc, e) }.unshift(init)
end
多くの一時配列がここにあります。 –
いい感じです。私は何とか減らすことができます。あなたは 'is_a?(Proc)'チェックをしなければなりませんか?私はそれがすでにprocであって安全であれば、それはノーオペレーションであると思うだろう。 –
ええ、私はそれがproc、no-opならば '.to_proc'を常に実行できることを意味する。あなたはそれをprocにしたのですか? –
- 1. Node.jsのsocket.ioに相当するRubyとは何ですか?
- 2. Rubyのsubstrに相当するものは何ですか?
- 3. Rubyの "pythonic"に相当するものは何ですか?
- 4. PHP substr()のRubyに相当するものは何ですか?
- 5. Pythonのdefaultdictに相当するRubyは何ですか?
- 6. RubyのEnumerable#サイクルに相当するJavaScriptは何ですか?
- 7. C#のhaskellのiterate関数に相当するものは何ですか?
- 8. JavaのStringReaderに相当するRubyは何ですか? Javaでは
- 9. Rubyは "相当"です
- 10. Pythonの "Construct"に相当するHaskell
- 11. OCamlのフォーマットライブラリに相当するHaskell
- 12. Boost.FusionのHaskellに相当する
- 13. HaskellのPython urllibに相当する
- 14. Pythonのos.walkのRubyに相当するものは何ですか?
- 15. Ruby on RailsビューのJSPのc:setに相当するものは何ですか?
- 16. Rubyに相当するPython "_"
- 17. C++のdynamic_castに相当するC#とは何ですか?
- 18. PHPの "self ::"に相当するC#とは何ですか?
- 19. JavaのThrowableに相当するC#とは何ですか?
- 20. VBのWithステートメントに相当するC#とは何ですか?
- 21. このAdoサンプルに相当するAdo.netとは何ですか?
- 22. このMATLABコードに相当するC++とは何ですか?
- 23. powercliのinvoke-vmscriptに相当するpyvmomiとは何ですか?
- 24. MongoDBのpushとrootに相当するC#は何ですか?
- 25. ASP.NET MVCのコントローラに相当するNode.jsとは何ですか?
- 26. Pythonのre.split()に相当するObjective-Cとは何ですか?
- 27. ASPのContentPlaceHolderに相当するGrails GSPとは何ですか?
- 28. TkinterのTk.iconbitmapに相当するwxPythonとは何ですか?
- 29. ページごとのjavascriptに相当するscalajsは何ですか?
- 30. WPFのキーボードクラスに相当するWindowsフォームとは何ですか?
クール。これまでのあなたの質問は何ですか? – mudasobwa
私はそれが助けになるなら、言い換えることができますか?私自身の関数を書かずにそれを行う方法があるのか、それとも関数を書くための最良の方法があるのだろうかと疑問に思った。 –