Dan*_*nyJ 1 haskell element list
Run Code Online (Sandbox Code Playgroud)palindromize :: [a] -> [a] palindromize [] = [] palindromize [x] = [x] palindromize (x:xs) = (x:xs) ++ reverse(x:xs)
我在haskell中执行了这个代码但是在中间元素中我不想看到double,怎么做呢?(另一种方式我不想看到原始列表的最后一个元素)我应该使用头部或尾部还是什么?
像那样:palindromize"mad"=="女士"palindromize"race"=="racecar"
我们可以使用tail :: [a] -> [a]获取包含列表中所有元素的列表,第一个除外.事实上,Haskell中的列表在概念上被定义为链表,tail因此可以被视为链表节点尾部的"getter".
我们知道,如果我们反转非空列表,那么这样的列表至少包含一个元素,所以我们知道tail存在这样的元素.因此tail,我们呼吁结果reverse:
palindromize :: [a] -> [a]
palindromize [] = []
palindromize xs = xs ++ tail (reverse xs)Run Code Online (Sandbox Code Playgroud)
我们也可以drop :: Int -> [a] -> [a]通过调用来drop 1提取没有第一个元素的列表,但是drop 1更安全:对于空列表drop 1将返回空列表.如果我们使用drop 1,我们也可以删除不同的子句:列表的回文就是列表,而列表的反面是我们从第一个元素中删除的:
palindromize :: [a] -> [a]
palindromize l = l ++ drop 1 (reverse l)Run Code Online (Sandbox Code Playgroud)