我有2个练习要完成,第一个应该从2个列表创建元组,它已完成。 我怀疑是第二次练习
Input
createlist [1,2] ['a','b','c']
Output
[[(1,'a'),(1,'b'),(1,'c')],[(2,'a'),(2,'b'),(2,'c')]]
在第二个练习中,他们问我函数的类型f
:
createlist l1 l2 = map (f l2) l1
where f l x = ...
根据我的理解,这里的f函数只接收一个列表( l2 ),为什么 f 函数中有2个参数?
修改
谢谢大家的见解,我得到了它的工作。
这是:
linhaz :: [a] -> [b] -> [[(a,b)]]
linhaz [] _ = []
linhaz _ [] = []
linhaz l1 l2 = map (f l2) l1
where
f [] x = []
f l x = (x,head l):(f (tail l) x)
答案 0 :(得分:3)
传递给map的函数必须只接受一个参数。但是,可以部分应用具有更多参数的函数(或curried),在这种情况下,它返回一个仅接受您不提供的参数的新函数。
因此,如果f是一个带有2个参数的函数(让他们称之为a和b),那么(f l2)
将返回一个新函数,其中a已经被设置为' l2&# 39;所以你唯一需要申请的是b的值。
所以f是一个双参数函数,我们将它转换为单参数函数,将其传递给map。