如何在Haskell中的列表中移动元素?

时间:2018-04-21 18:03:00

标签: list haskell element

我是Haskell的新手,我一直在尝试一些功能。我想创建一个函数,其中包含一个列表(任何类型的元素),一个元素(与列表元素相同的类型)和一个整数。

所以我们说我们有功能移动。

move :: Eq u => [u]->u->Int->[u]

所以这就是我想要做的。如果它是其中的一部分,一切都是关于在我的列表中移动输入元素。整数输入表示我想移动特定元素的左或右位置数。

当我的整数大于零(整数> 0)时,我希望元素向右移动与整数一样多的位置。

当我的整数最小时为零(整数< 0)我希望元素向左移动与| Integer |一样多的位置。

现在,如果整数大于可用位置,则元素应该转到列表的顶部或末尾。

例如

我列出了[1,2,3,4,5]元素3和整数1

1>0以来,元素3向右移动1位置,因此我有[1,2,4,3,5]

我列出了[1,2,3,4,5]元素3和整数-1

-1<0以来,元素3向左移动|-1|=1位置,因此我有[1,3,2,4,5]

我列出了[1,2,3,4,5]元素3和整数5

由于5> 0,元素3向右移动5个位置。但是在右边我只能移动2个位置。所以元素到了列表的末尾,我有[1,2,4,5,3]。

我有列表[1,2,3,4,5]元素3和整数-5。

由于-5 <0,元素3向左移动| -5 | = 5个位置。但是在左边我只能移动2个位置。所以元素到了列表的顶部我[3,1,2,4,5]。

如果我的输入Integer为0,我删除列表中输入元素的第一个实例(如果有)。我还有一个函数来检查我的输入元素是否在列表中。

有什么想法吗?提前谢谢!

    checkIfElementIsInList :: (Eq u) => u->[u] ->Bool
    checkIfElementIsInList x l 
                        |x`elem` l = True
                        |otherwise = False

    deleteFirstInstance :: (Eq u) => u->[u]->[u]            
    deleteFirstInstance _ [] = [] 
    deleteFirstInstance a (b:bc) | a == b    = bc 
                         | otherwise = b : deleteFirstInstance a bc 

0 个答案:

没有答案