haskell一些内置函数的实现和扩展(1)

本文探讨了Haskell中的一些内置函数实现,包括取头元素、取倒数第二个元素等,并介绍了错误的last'函数实现。此外,还讨论了如何修改列表,如将头元素移到尾部、删除最后一个元素、置换开头和结尾元素,以及如何删除数组中特定值的技巧。
摘要由CSDN通过智能技术生成

– 取头元素

head' :: [a] -> a
head' [] = error "empty list";
head' (x:xs) = x

取第二个元素

headSecond :: [a] -> a
headSecond [] = error "empty list"
headSecond [x] = error "only one element"
headSecond [x,y] = y
headSecond (x:y:z) = headSecond [x,y]

– 取最后一个元素

last' :: [a] -> a
last' [] = error "empty list"
last' [x] = x
last' (x:xs) = last' xs

– 注意:错误写法: last’ (x:xs) = last’ [xs]
– 此处的被":" 的 xs 本来就是list

– 取倒数第二个元素

lastSecond :: [a] -> a
lastSecond [] = error "empty list"
lastSecond [x] = error "only one element"
lastSecond [x, y] = x
lastSecond (x:y:xs) = lastSecond (y:xs)

– 此处的":" x,y是变量;xs是list
– ch1 :: [a] -> [b] 这里的变量必不能是一样的

– 将头元素放至list的尾端

ch1 :: [a] -> [a]
ch1 [] = error "empty list"
ch1 [x] = [x]
ch1 (x:xs) = xs ++ [x]

–删掉最后一个元素

delLast :: [a] -> [a]
delLast [] = error "empty list"
delLast [x] = []
delLast (x:xs) = x : delLast xs

–将最后一个数字移至开头

ch2 :: [a] -> [a]
ch2 [] = error "empty list"
ch2 [x] = [x]
ch2 (x:xs) = [last' xs] ++ delLast xs

–置换开头和最后一个元素

ch3 :: [a] -> [a]
ch3 [] = error "empty list"
ch3 [x] = [x]
ch3 [x,y] = [y, x]
ch3 (x:y:xs) = [last' (y:xs)]  ++ delLast (y:xs) ++ [x]
ch3' :: [a] -> [a]
ch3' [] = []
ch3' [x] = [x]
ch3' (x:xs) = 
    let (f, g) = swap x xs 
    in f:g
    where swap k [y] = (y, [k])
          swap k (y:ys) = let (n,m) = swap k ys in (n, y:m)

– 删除数组中指定值

delVal :: (Eq) a => a -> [a] -> [a]
delVal elem [] = []
delVal elem (x:xs)
 | elem == x = delVal elem xs
 | otherwise = x : delVal elem xs

–删除与第一个元素值相同的值

get :: (Eq) a => [a] -> [a]
--get [] = error "empty list"
get [] = []
get (x:xs) = x : get ( delVal x xs )
get1 :: (Eq) a => [a] -> [a]
--get [] = error "empty list"
get1 [] = []
get1 (x:xs)
 | delVal x xs == xs = x : get1 xs
 | otherwise = get1 ( delVal x xs )
dump1 :: (Eq a) => [a] -> [a]
dump1 []  = []
dump1 [x] = [x]
dump1 (x:xs) = x: [k | k <- dump1(xs), k /= x]

–删除与第一个元素值相同的值,包括第一个元素

dump2 :: (Eq a) => [a] -> [a]
dump2 [] = []
dump2 [x] = [x]
dump2 (x:xs)
    | [k | k <- xs, k==x] == []  =  x:(dump2 xs)
    | otherwise = dump2[k | k <- (xs) , k /= x]
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值