首页 > 解决方案 > 用于处理整数元组的 Haskell 函数

问题描述

我刚刚开始学习 Haskell,并正在尝试创建一个函数,该函数对包含 6 个整数的元组执行多项检查。这些检查包括:

  1. 所有数字都不一样;
  2. 交替数字是偶数和奇数,或奇数和偶数;
  3. 备用数字相差两个以上;
  4. 第一对和中间的数字对形成数字,它们都是最后一个数字的倍数

问题是我可以尝试这个并有一些工作功能,比如

contains e [] = False
contains e (x:xs)
    |   x == e = True
    |   otherwise = contains e xs

unique :: [Int] -> Bool
unique [] = True
unique (x:xs)
    |   contains x xs   = False
    |   otherwise       = unique xs

对于第一个要求,但正如您所见,这依赖于使用列表而不是元组。如果有人可以帮助我如何为元组创建这些函数以及任何代码效率建议,我将不胜感激。

标签: listhaskelltuples

解决方案


您可以使用以下方法将 6 元组转换为列表:

tuple6ToList :: (a, a, a, a, a, a) -> [a]
tuple6ToList (a, b, c, d, e, f) = [a, b, c, d, e, f]

然后例如在列表上运行检查。这可能更简单,因为然后可以在列表上递归,而对于元组,这意味着您将检查“展开”为对元素的单独检查。


推荐阅读