1
リスト内の整数を合計したいとします。私はこれを行うには、初期値0と加算関数を持つリストにreduce演算子を適用します。 ATSのreduce operatorの名前は何ですか?ATSのリストのreduce演算子の名前は何ですか?
リスト内の整数を合計したいとします。私はこれを行うには、初期値0と加算関数を持つリストにreduce演算子を適用します。 ATSのreduce operatorの名前は何ですか?ATSのリストのreduce演算子の名前は何ですか?
「reduce」という名前は少し曖昧です。 reduceLeftまたはreduceRightのいずれかを意味する可能性があります。 ATSでは、「減らす」は「折りたたみ」と呼ばれます。前者はテール再帰的ですが、後者はそうではない、 'foldleft'と 'foldright'があります。一つは、またfoldright使用することができます
//
fun
sumup(xs: list0(int)): int =
(xs).foldleft(TYPE{int})(0, lam(r, x) => r+x)
//
// If dot-notation is to be spared, please write:
fun
sumup(xs: list0(int)): int =
list0_foldleft<int><int>(xs, 0, lam(r, x) => r+x)
//
:たとえば、次のようにsumup
を実現することができる
fun
sumup(xs: list0(int)): int =
(xs).foldright(TYPE{int})(lam(r, x) => r+x, 0)
をしかしxs
は非常に長いリスト(例えば、ある場合sumup
のこのバージョンは、潜在的にスタックオーバーフローを引き起こす可能性があります100万要素を含む)。