Article View: pl.comp.lang.funkcyjne
Article #358[Haskell] Lista bez powtórzeń.
From: Marcin Gajda
Date: Sun, 15 Jun 2003 20:09
Date: Sun, 15 Jun 2003 20:09
45 lines
2399 bytes
2399 bytes
Witam,
nie szukałem za bardzo w Prelude i modułach, ale potrzebuję funkcji
określającej, czy w liście nie ma powtórzeń. Do głowy przyszło mi takie
cudo poniżej, lecz na hugsie dla [1..10000] (specjalnie złośliwy
przypadek, aby wywalić naiwnego quicksorta) działa już trochę za długo:
{-
- Daje medianę trzech elementów
-}
mediana :: Ord a => a -> a -> a -> a
mediana a b c = if a <= b then
if b <= c then b
else if a <= c then c else a
else
if a <= c then a
else if b <= c then c else b
{-
- Sprawdza elementy.
-}
rozna_lista :: Ord a => [ a ] -> Bool
rozna_lista [] = True
rozna_lista [ a ] = True
rozna_lista [ a , b ] = a /= b
rozna_lista l = let m = mediana
( head l )
( head ( drop ( ( length l ) `div` 2 ) l ) )
( head ( reverse l ) ) in
length ( [ a | a <- l , a == m ] ) == 1 &&
rozna_lista [ a | a <- l , a < m ] &&
rozna_lista [ a | a <- l , a > m ]
Sorki za przekroczenie 72 znaków - tak jakoś mi się pisało ;)
Tak więc - macie może jakiś pomysł na coś szybszego? Mógłbym posortować w
O(nlogn) jakimś merdżsortem, ale nie jestem pewien, czy tędy droga...
Wszelkie uwagi (krytyczne!) na temat stylu i podejścia miło widziane - dopiero
się zapoznaję z tym Haskellem :P
Pozdrawiam,
--
Marcin Gajda ________________________
Dieu me pardonerra - c'est son metier
Technical Details
Message-ID:
<bcijpt$1s1$1@kenny.mimuw.edu.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!mimuw.edu.pl!news.mimuw.edu.pl!not-for-mailShow Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!mimuw.edu.pl!news.mimuw.edu.pl!not-for-mail
From: Marcin Gajda <marcin.gajda@kicha.zagrycha.pl>
Newsgroups: pl.comp.lang.funkcyjne
Subject: [Haskell] Lista bez powtórzeń.
Date: Sun, 15 Jun 2003 20:09:33 +0000 (UTC)
Organization: MIMUW
Lines: 45
Sender: Marcin Gajda <mg174717@zodiac.mimuw.edu.pl>
Message-ID: <bcijpt$1s1$1@kenny.mimuw.edu.pl>
NNTP-Posting-Host: zodiac.mimuw.edu.pl
Mime-Version: 1.0
X-Trace: kenny.mimuw.edu.pl 1055707773 1921 10.1.1.1 (15 Jun 2003 20:09:33 GMT)
X-Complaints-To: abuse@news.mimuw.edu.pl
NNTP-Posting-Date: Sun, 15 Jun 2003 20:09:33 +0000 (UTC)
User-Agent: tin/1.5.10-20011117 ("Darkcell") (UNIX) (Linux/2.4.20 (i686))
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit