如何将一个函数接收到的列表传递到另一个函数-在Haskell?



如何将一个函数接收到的列表传递到另一个函数-在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

最新更新