我需要一个Haskell函数,该函数需要一个函数列表和一个元素列表,并将这些函数应用于此类元素:第一个函数应用于第一个元素,第二个函数应用于第二个元素,依此类推。如果任何列表停止,我希望功能停止。我想出的定义是:
apply :: [(a -> b)] -> [a] -> [b]
Run Code Online (Sandbox Code Playgroud)
我希望它能像这样工作:
apply [(+1), (*3), (^2)] [1,2,3] == [2,6,9]
apply [even, odd] [1..] == [False, False]
Run Code Online (Sandbox Code Playgroud)
到目前为止,我尝试过的事情:
apply :: [(a -> b)] -> [a] -> [b]
apply [] _ = []
apply (f:fs) x = (f x) : (apply fs x)
Run Code Online (Sandbox Code Playgroud) 作为练习,我尝试自己编写此代码,但是我被卡住了,不知道代码中的错误在哪里。
module Hf where
--sumSquaresTo :: Integer -> Integer
--sumSquaresTo x = sum [ n^2 | n <- [1..x] ]
divides a b = b `mod` a == 0
divisors a = [n | n <- [1..a], n `divides` a ]
lnko :: Integer -> Integer -> Integer
lnko a b = [n | n <- [1..max(a b)], (n `divides` a) && (n `divides` b) ]
Run Code Online (Sandbox Code Playgroud)
GHCI输出:
error:
* Couldn't match expected type `Integer'
with actual type `[a0 -> a0]' …Run Code Online (Sandbox Code Playgroud) 我有一个清单,比如说[1,2,3,4,3,2,4]。我想输出每个元素一次,例如[1,2,3,4]。我怎样才能在 Haskell 中做到这一点?