创建无限反向添加然后排序

时间:2010-11-22 20:36:53

标签: haskell

我正在尝试在haskell中创建无限反向添加然后排序列表

r = map head (iterate rlist [2..])

rlist (x:xs) = [x : xs | x <- xs ,  x  quick $ p+x ]
                  where p = reverse x

quick [] = []
quick (x:xs) = quick [u |u <- xs, u < x] ++ [x] ++ quick [u | u <- xs , u >= x] 

但它没有用,有什么建议吗?

感谢。

2 个答案:

答案 0 :(得分:4)

我不确定您希望代码如何工作(当您发布代码时可能存在问题)。也就是说,列表理解... x quick $ p + x的一部分对我没有意义 - x不是一个函数,它不是一个列表,因此reverse x也没有意义。对于此问题,您已隐藏x - 请注意,列表理解中的xx中的ratslist (x:xs)不同。

使用read和show确实存在一个简单的解决方案,将数字转换为数字列表(井,字符,但它可以工作)并返回:

import Data.List

myRats = 1  : map ratify myRats
-- Alternatively: myRats = iterate ratify 1

ratify :: Integer -> Integer
ratify n = sortRat (n + rev n)
  where
  rev = read . reverse . show
  sortRat = read . sort . show

在GHCi中:

*Main Data.List> take 10 myRats
[1,2,4,8,16,77,145,668,1345,6677]

答案 1 :(得分:0)

我不太明白你的问题,但根据你的例子,我会尝试

rats x = sort (zipWith (+) x (reverse x))

rats [1,4,5]中的[6,6,8]相同。