【发布时间】:2016-09-17 14:23:39
【问题描述】:
我有两个执行以下操作的函数:
获取两个 Ints 列表(list1,list2)。
取第一个列表的平均值,取一个范围值(r)。
在list2上映射,检查每个元素是否在范围内,如果超出范围则返回0。
将返回为 0 的任何 list2 元素转换为 False,将其他值转换为 True。
检查 list2 是否包含任何 False 值。
代码:
checkList :: Int -> Int -> Int -> Int --Check if element is within range
checkList element ave r
| element >= (ave + (ave + r)) = 0
| element <= (ave - (ave + r)) = 0
| otherwise = e
mainFunc :: [Int] -> [Int] -> (Int -> Int -> Int -> Int) -> Bool
mainFunc list1 list2 checkL = elem (False) resultIntToBool --Check for any False elements
where
resultIntToBool = map (\element -> if element == 0 then False else True) result --Convert elements to bools
result = map (\element -> checkL element ave r) list2 --Pass each element to checkL
ave = sum list1 `div` length list1 --Calculate average
r = ave + 30 --Create range value
我怎样才能使这段代码不那么冗长和更易读?
【问题讨论】:
标签: haskell