Ran*_*nce 2 haskell functional-programming function fold
我怎样才能创建一个与此类似的函数,但n
作为一个变量,其数字1
以xs的长度值开头并以xs的长度值结尾?
例如,我想[1,2,3]
返回结果3*1 + 2*2 + 1*3
.
function :: [Int] -> Int
function xs = foldr (\x acc -> (x*n) + acc) 0 xs
Run Code Online (Sandbox Code Playgroud)
惯用的Haskell答案可以是:
function = sum . zipWith (*) [1 ..] . reverse
Run Code Online (Sandbox Code Playgroud)
从右到左阅读:你反转列表(reverse
),这样做你不需要向后计数(从n到1)而是向前计数(从1到n)...然后用索引用*(zipWith (*) [1..]
)来压缩它最后总结了(sum
).
使用zipWith
:
import Data.List
function :: [Int] -> Int
function xs = sum $ zipWith (*) xs lst
where
lst = unfoldr (\x -> Just (x-1,x-1)) $ (length xs) + 1
main = putStr $ show $ function [40,50,60]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
234 次 |
最近记录: |