【问题标题】:Swapping Pairs in Haskell在 Haskell 中交换对
【发布时间】:2014-01-19 16:58:38
【问题描述】:

所以我有这个功能可以在haskell中交换成对的数字,我不知道我做错了什么,也许你们可以帮帮我。 所以基本上这个函数得到一个列表,比如说,[1,2,3,4,5],并返回成对交换的数字,比如,[2,1,4,3,5]。如果元素个数是奇数,则最后一个元素保持不变。

这是我所做的:

swapPairs :: [a] -> [a]
swapPairs (x:xs) = [!!x = !!x+1 && !!x+1 = !!x| x <- xs]

【问题讨论】:

    标签: haskell


    【解决方案1】:
    -- Return first two elements in inverted order, recusively call for remaining list,
    -- only matches lists of two or more elements
    swapPairs (a:b:xs) = b : a : swapPairs xs
    -- Return tail for zero or one remaining elements
    swapPairs (xs)     = xs
    

    【讨论】:

    • 我不太了解第二行...为什么有必要?我们不是已经在第一行进行了递归调用吗?
    • 需要最后一行来匹配具有 1 个或 0 个元素的列表。在这些情况下,不需要交换,所以它只返回输入。
    【解决方案2】:

    您可以使用模式匹配来获取 2 个头部元素:

    swapPairs (x:y:xs) = y : x : (swapPairs xs)
    

    【讨论】:

    • 你错过了递归调用的终止。
    • @JensErat,我不打算为作者编写所有代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 2019-02-07
    • 2012-02-28
    • 1970-01-01
    • 2014-03-27
    相关资源
    最近更新 更多