2010-11-22 7 views
0

Ich versuche, eine infinte Reverse dann sortieren in HaskellSchaffung infinte Reverse fügen Sie dann sortieren

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] 

aber es funktioniert nicht, irgendwelche Vorschläge Liste zu erstellen hinzufügen?

danke.

+4

Hinweis: Sie möchten wahrscheinlich die 'sort' von' Data.List' verwenden. Quicksort in Haskell * liest * großartig, aber eigentlich ist es "O (gruselig)". – delnan

+2

"Aber es funktioniert nicht". Bitte posten Sie weitere Informationen dazu. Fehler kompilieren? Laufzeitfehler? Falsche Ausgabe? – luqui

+1

Es würde helfen, wenn Sie angeben, was genau Sie tun möchten. rlist ist kompletter Unsinn: Es gibt keinen Typ, so dass der Typ von x (beide x) gleichzeitig eine Zahl und eine Funktion und eine Liste ist. Ich bin mir nicht einmal sicher, ob du versuchst, eine unendliche Liste umzukehren und sie dann zu sortieren ?! oO – comonad

Antwort

0

verstehe ich nicht ganz dein Problem, aber nach Ihrem Beispiel, würde ich

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

wie in rats [1,4,5] versuchen, die [6,6,8] entspricht.

4

Ich bin mir nicht sicher, wie Sie erwarten, dass Ihr Code funktioniert (vielleicht gab es ein Problem, als Sie den Code gepostet haben). Nämlich, ein Teil Ihrer Liste Verständnis ... x quick $ p + x macht keinen Sinn für mich - x ist keine Funktion und es ist keine Liste, so reverse x macht auch keinen Sinn. Für diese Angelegenheit haben Sie beschattet x - beachten Sie die x in Ihrer Liste Verständnis ist nicht das gleiche wie die x in ratslist (x:xs).

Eine einfache Lösung existiert, die Zahlen zu Listen von Ziffern lesen und zeigen, konvertieren (na ja, Zeichen, aber es funktioniert) und zurück:

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 

Und in GHCi:

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