【发布时间】:2020-06-25 03:37:45
【问题描述】:
我刚开始玩 Elm 和 functional programming。我真的很喜欢这种语言,但我在实现非常简单的计算时遇到了麻烦。
我下面的代码将wacc : Float 和cfs : List Float 作为输入,并且应该计算一个净预设值(即,为cfs 的每个元素计算cfs_i / (1 + wacc)^i,然后计算这些值的总和)。
代码有效,但非常冗长,可能不习惯。
我的主要问题除了提示如何使其更简洁/惯用之外是如何更改我的代码以能够接受 types Maybe 的 wacc 和 cfs。
对任何提示/信息都有帮助。谢谢!
-- helper functions
zip : List a -> List b -> List (a,b)
zip list1 list2 =
List.map2 Tuple.pair list1 list2
calcDF : Float -> Int -> List Float
calcDF wacc n =
let
waccs = List.repeat n wacc
time = List.range 0 n |> List.map toFloat
waccs_time = zip waccs time
in
List.map (\x -> 1/ (1 + Tuple.first x)^(Tuple.second x)) waccs_time
-- my npv function
calcNPV : List Float -> Float -> Html text
calcNPV cfs wacc =
let
n = List.length cfs
df = calcDF wacc n
cfs_df = zip cfs df
in
List.map (\x -> (Tuple.first x) * (Tuple.second x)) cfs_df
|> List.foldl (+) 0
例子:
calcNPV [100,100,100] 0.1
-- returns 273.553719
【问题讨论】:
-
您希望 cfs 参数是浮点数列表还是浮点数列表,即
Maybe (List Float)与List (Maybe Float)?换句话说,您是在准备丢失整个列表还是丢失列表中的单个值?