如何将一个函数接收到的列表传递到另一个函数-在Haskell中?
我正在编写一个函数,检查(转换)列表的mod是否等于零,我使用两个函数,但我不知道如何传递在valida"中收到的列表函数到"duplicado";函数。
要工作,我将列表传递到valida"函数,但不能作为参数。
我希望在duplicador [1, 3, 8, 6]
中,我可以传递在valida"中收到的参数/列表。函数
module Main where
duplicador :: [Integer] -> [Integer]
duplicador [] = []
duplicador (x:[]) = [x]
duplicador (x:y:zs)
| (length (x:y:zs)) `mod` 2 /= 0 = x : y*2 : duplicador zs
| otherwise = x*2 : y : duplicador zs
valida :: [Integer] -> Bool
valida r
| r == 0 = True
| otherwise = False
where
r = foldr (x y -> x+y) 0 (duplicador [1, 3, 8, 6]) `mod` 10
main = do
print(valida [1, 3, 8, 6])```
在验证中隐藏了参数r。将r重命名为某个东西,让你使用它。
valida :: [Integer] -> Bool
valida entrada
| r == 0 = True
| otherwise = False
where
r = foldr (x y -> x+y) 0 (duplicador entrada) `mod` 10
我们还可以进一步改进代码。foldr (x y -> x+y) 0
可以简化为foldr (+) 0
,但它仍然是一种非常常见的模式,我们可以用sum
代替它。对于模式if bool then true else false
就是bool
,渲染:
valida r = sum (duplicador r) `mod` 10 == 0