试图了解邮政编码

时间:2019-10-26 01:39:35

标签: haskell functional-programming

我试图了解如何在Haskell中使用zip。我最近一直在学习Haskell,并试图从两个单独的列表中创建一个元组列表。

我有以下内容:

createList :: [Char] -> [Char] -> [(Char,Char)]    
createList xs ys = zip(xs,ys)

我知道zip应该创建给定两个列表的元组列表,但是出现以下错误:

Couldn't match expected type ‘[a0]’
              with actual type ‘([Char], [Char])’

有人可以告诉我我在哪里绊脚石吗?

2 个答案:

答案 0 :(得分:6)

Haskell函数调用不使用方括号或逗号。

您可以将ScoreList函数编写为:

createList

或者简单地

createList xs ys = zip xs ys

因此,createList = zip 函数是多余的;只是createList。我能想到的别名的唯一潜在用途是,如果您确实想约束给定的类型。

答案 1 :(得分:4)

如果您删除zip调用前后的括号,则您的代码应该可以正常工作

createList :: [Char] -> [Char] -> [(Char,Char)]

createList xs ys = zip xs ys

说明:

运行zip ([1, 2, 3], [4, 5, 6])时出现完整错误(请注意括号):

<interactive>:4:5:
    Couldn't match expected type ‘[a]’
                with actual type ‘([Integer], [Integer])’
    Relevant bindings include
      it :: [b] -> [(a, b)] (bound at <interactive>:4:1)
    In the first argument of ‘zip’, namely ‘([1, 2, 3], [4, 5, 6])’
    In the expression: zip ([1, 2, 3], [4, 5, 6])
    In an equation for ‘it’: it = zip ([1, 2, 3], [4, 5, 6])

请注意In the first argument of ‘zip’, namely ‘([1, 2, 3], [4, 5, 6])’部分。括号被解释为tuple constructorzip函数期望将列表作为其第一个参数,但我们正在将其传递给元组。