2016-11-07 24 views

答えて

1

「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万要素を含む)。

関連する問題