我正在尝试在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]
但它没有用,有什么建议吗?
感谢。
答案 0 :(得分:4)
我不确定您希望代码如何工作(当您发布代码时可能存在问题)。也就是说,列表理解... x quick $ p + x
的一部分对我没有意义 - x
不是一个函数,它不是一个列表,因此reverse x
也没有意义。对于此问题,您已隐藏x
- 请注意,列表理解中的x
与x
中的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]
相同。