我正在写一个函数,它把一个整数和一个整数数组作为参数,对于数组中的每个偶数值,它把整数连接到最后一个数组中。所以,类似这样:f 3 [1,2,3,4,5,6] = [1,2,3,3,4,3,5,6,3]
这是我想象的代码将工作(我刚刚开始,所以很抱歉,如果它是坏的):
f :: Int -> [Int] -> [Int]
f(x,[]) = []
f(x,y)
|even head(y) = (head(y) ++ [x] ++ f(x,drop 1 y)
|otherwise = head(y) ++ f(x,(drop 1 y))
我得到的错误是“无法将预期的'Int'类型与实际类型(a3,a3)匹配”。我知道参数类型不匹配,但我不确定此处的正确语法是什么样子
2条答案
按热度按时间am46iovg1#
你使用
(x, [])
,这意味着输入类型是一个元组,所以f :: (Int, [Int]) -> [Int]
。我还将使用模式匹配来代替
head
和tail
,因此:您还可以泛化类型签名,并使用内部函数来避免每次都传递
x
:ffdz8vbo2#
另一种方法是使用右折叠在偶数后面插入所需的元素。
我们可以将其简化为:
请注意,如果不指定类型,
f
的更一般的推断类型将是: