3
Rubyには、「melds」のリストを取り、ツリー構造を作成して最適な組み合わせを見つけることができます。私はこのコードをF#に相当するものに変換したいと思っていますが、F#が(少なくとも私が知っている限り)ノードのツリーを作成する簡単な方法を持っていないので、見ている方法を考えるのは苦労しています。RubyコードをFに変換するのに助けが必要です
私は非常に長い間F#で作業していないので、高次関数を使う上での知識や知識があまりないので、誰かがこのコードを変換する方法を知っていれば、感謝!ありがとう。
class MeldNode
attr_accessor :cards, :deadwood, :parent
def initialize(cards, parent)
@parent = parent
@cards = cards
@deadwood = count_deadwood(cards)
if (parent != nil)
@deadwood = @parent.deadwood + @deadwood
end
end
end
def build_meld_tree(melds, root_meld)
best = root_meld
melds.each do |m|
n = MeldNode.new(m, root_meld)
new_tree = build_meld_tree(clean_meld_group(melds, m), n)
best = new_tree if (best == nil) || (new_tree.deadwood > best.deadwood)
end
best
end
何を試しましたか? F#は再帰を持っているので、そのコードでは「シンプル」でないものは何も表示されません。 – ildjarn
「F#はノードのツリーを作成する簡単な方法がありません」という意味を理解していません。 F♯は完全な機能を備えた必須の不完全なOO言語です(たとえそれが好きな使い方ではない場合でも)。そうすれば、Rubyで行ったのと同じことができます。さらに、F♯には、木を表現するための完全な*である代数和型(F♯の* Discriminated Unions *と呼ばれます)があります。これはおそらく代数データ型を動機付けするために最も広く使われている例の1つです: 'type tree <'a> = 'aの葉|ツリーのノード<'a> *ツリー<'a> '。 [注:私は実際にはF#をよく知らないが、構文エラーがあるかもしれない。] –
F#については何も知らないが、Ruby - > C#とC# - > F#の翻訳者が存在する多分あなたは2つのステップでそれを行うことができます。 –