[Haskell]Priem generator werkt niet*

Pagina: 1
Acties:

  • hwschuur
  • Registratie: April 2003
  • Laatst online: 07-11-2024
code:
1
filter (\p -> [f | f <- [1..p], p `mod` f == 0] == [1,p]) [1..]


Ik heb een tijdje geleden deze code getest in Hint (de Helium interpreter voor Haskell), en ik zou zweren dat het werkte. Vandaag probeer ik het nogmaals (om iemand te overtuigen dat je in Haskell écht een lijst van priemgetallen kan genereren in 1 regel), en ja hoor, het werkt niet :(

code:
1
2
3
4
5
Type error in infix application
 expression       : [ f | f <- [1 .. p], p `mod` f == 0 ] == [1, p]
 operator         : ==
   type           : Int   -> Int   -> Bool
   does not match : [Int] -> [Int] -> Bool


Op zich logisch, maar ik heb de vorige keer ook de code rechtstreeks uit het voorbeeld gekopieerd en toen werkte het volgens mij wel :? Is hier sprake van muterende code? ;)

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 26-05 00:01

Janoz

Moderator Devschuur®

!litemod

Topicstarter
Zo, even een bericht van het grote topic [rml][ alg] fraaiste prog voorbeelden.[/rml] afgesplitst aangezien het een beetje nutteloze kick was met een toch normale vraag.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Waarin compileer je dit? GHC/Hugs of Helium?

[edit] Je weet dat Helium (van de uu) niet volledig Haskell conform is he?
Nu ik kijk, is het logisch. Een van de dingen die Helium niet ondersteunt is overloading van functies. == is een functie op Int -> Int -> Bool
Jij zoekt eqList (==)

code:
1
filter (\p -> eqList (==) [ f | f <- [1 .. p], p `mod` f == 0 ] [1,p] ) [1..]

[ Voor 108% gewijzigd door Glimi op 24-03-2004 22:16 ]


  • tomato
  • Registratie: November 1999
  • Niet online
De code die je hier geeft is goed volgens mij.

edit:
Dit sloeg nergens op, maar wat Glimi zegt wel ;)


In Hugs gaat dit dan ook goed.

[ Voor 66% gewijzigd door tomato op 24-03-2004 22:33 ]


  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
TS zijn regel zal werken met ghc, hugs, maar niet met helium.
Glimi's versie zal werken met helium, maar niet zomaar met ghc en hugs.

Helium bevat al ondersteuning voor classes als Eq. Het is alleen op het moment nog experimenteel. Ik denk dat je bij de volgende publieke release dit straks via een commandline parameter in en uit kan schakelen. Er is al een universiteit die bijvoorbeeld liever haskell leert zonder type-classes omdat het nogal verwarrend is (de duidelijkheid van je foutmeldingen gaat ook achteruit). Aan de andere kant zijn er universiteiten die het liever wel hebben omdat men bang is dat anders de overstap naar hugs en ghc te groot is.

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 21-02 23:50
- ik zie het al, laat maar -

[ Voor 80% gewijzigd door Grijze Vos op 25-03-2004 00:25 ]

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info

Pagina: 1