我是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