这个功能的类型是什么?

时间:2015-01-24 02:57:01

标签: haskell

我有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)

1 个答案:

答案 0 :(得分:3)

传递给map的函数必须只接受一个参数。但是,可以部分应用具有更多参数的函数(或curried),在这种情况下,它返回一个仅接受您不提供的参数的新函数。

因此,如果f是一个带有2个参数的函数(让他们称之为a和b),那么(f l2)将返回一个新函数,其中a已经被设置为' l2&# 39;所以你唯一需要申请的是b的值。

所以f是一个双参数函数,我们将它转​​换为单参数函数,将其传递给map。