Send Beginners mailing list submissions to
        beginners@haskell.org

To subscribe or unsubscribe via the World Wide Web, visit
        http://www.haskell.org/mailman/listinfo/beginners
or, via email, send a message with subject or body 'help' to
        [EMAIL PROTECTED]

You can reach the person managing the list at
        [EMAIL PROTECTED]

When replying, please edit your Subject line so it is more specific
than "Re: Contents of Beginners digest..."


Today's Topics:

   1. Re:  Exposing Ratio data constructor ( Chadda? Fouch? )
   2.  Perfect numbers (Matthew Williams)
   3. Re:  Perfect numbers (wman)
   4. Re:  Perfect numbers (Jason Dusek)
   5. Re:  Perfect numbers (wman)


----------------------------------------------------------------------

Message: 1
Date: Mon, 29 Sep 2008 21:03:50 +0200
From: " Chadda? Fouch? " <[EMAIL PROTECTED]>
Subject: Re: [Haskell-beginners] Exposing Ratio data constructor
To: "Casey Rodarmor" <[EMAIL PROTECTED]>
Cc: beginners@haskell.org
Message-ID:
        <[EMAIL PROTECTED]>
Content-Type: text/plain; charset=ISO-8859-1

2008/9/29 Casey Rodarmor <[EMAIL PROTECTED]>:
>
> invertRatio r = denominator r % numerator

Ratio is an instance of Fractional, which means :
invertRation = recip

ou

invert f = 1 / f

(probably the default definition of recip anyway).

> Is there any way to avoid this, while still letting the user benefit
> from the nice pattern matching syntax that exposing the data
> constructor allows?

To this more general question : allow the convenience of pattern
matching while keeping a datatype abstract, the latest GHC (6.10)
bring a new extension called "view pattern", it may not be ideal but
it should be pretty useful in this direction.
http://hackage.haskell.org/trac/ghc/wiki/ViewPatterns

-- 
Jedaï


------------------------------

Message: 2
Date: Thu, 2 Oct 2008 05:45:01 +0100
From: "Matthew Williams" <[EMAIL PROTECTED]>
Subject: [Haskell-beginners] Perfect numbers
To: <beginners@haskell.org>
Message-ID:
        <[EMAIL PROTECTED]>
Content-Type: text/plain; charset="us-ascii"

Hi Guys,
 
I'm new to Haskell and I was wondering if you can help me:
 
One of the first program's I tend to write when I'm looking at a new
language is a program to generate a list of perfect numbers:
 
--My First Perfect Number Generator
factors :: Integer -> [Integer]
factors x = [z | z <- [1..x-1], x `mod` z == 0]
 
is_perfect :: Integer -> Bool
is_perfect x = if sum(factors x) == x then True else False
 
do_perfect :: [Integer] -> [Integer]
do_perfect x = [z |z <- x, is_perfect z ]
 
Then to run it:
> do_perfect [1..9000]
 
I'm using GHC to run it. My problem / question is this: It's running
quite a lot slower than equivalent programs in erlang and python. I
suspect it's down to the way I've written it. Any thoughts (or comments
in general)
 
Many thanks
 
Matt

______________________________________________________________________
This email may contain privileged or confidential information, which should 
only be used for the purpose for which it was sent by Xyratex. No further 
rights or licenses are granted to use such information. If you are not the 
intended recipient of this message, please notify the sender by return and 
delete it. You may not use, copy, disclose or rely on the information contained 
in it.

Internet email is susceptible to data corruption, interception and unauthorised 
amendment for which Xyratex does not accept liability. While we have taken 
reasonable precautions to ensure that this email is free of viruses, Xyratex 
does not accept liability for the presence of any computer viruses in this 
email, nor for any losses caused as a result of viruses.

Xyratex Technology Limited (03134912), Registered in England & Wales, 
Registered Office, Langstone Road, Havant, Hampshire, PO9 1SA.

The Xyratex group of companies also includes, Xyratex Ltd, registered in 
Bermuda, Xyratex International Inc, registered in California, Xyratex 
(Malaysia) Sdn Bhd registered in Malaysia, Xyratex Technology (Wuxi) Co Ltd 
registered in The People's Republic of China and Xyratex Japan Limited 
registered in Japan.
______________________________________________________________________
-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
http://www.haskell.org/pipermail/beginners/attachments/20081002/fb1929bb/attachment-0001.htm

------------------------------

Message: 3
Date: Thu, 2 Oct 2008 07:25:17 +0200
From: wman <[EMAIL PROTECTED]>
Subject: Re: [Haskell-beginners] Perfect numbers
To: "Matthew Williams" <[EMAIL PROTECTED]>
Cc: beginners@haskell.org
Message-ID:
        <[EMAIL PROTECTED]>
Content-Type: text/plain; charset="iso-8859-1"

First step would probably be using Ints instead of Integers.

On Thu, Oct 2, 2008 at 6:45 AM, Matthew Williams <
[EMAIL PROTECTED]> wrote:

>  Hi Guys,
>
> I'm new to Haskell and I was wondering if you can help me:
>
> One of the first program's I tend to write when I'm looking at a new
> language is a program to generate a list of perfect numbers:
>
> --My First Perfect Number Generator
> factors :: Integer -> [Integer]
> factors x = [z | z <- [1..x-1], x `mod` z == 0]
>
> is_perfect :: Integer -> Bool
> is_perfect x = if sum(factors x) == x then True else False
>
> do_perfect :: [Integer] -> [Integer]
> do_perfect x = [z |z <- x, is_perfect z ]
>
> Then to run it:
> > do_perfect [1..9000]
>
> I'm using GHC to run it. My problem / question is this: It's running quite
> a lot slower than equivalent programs in erlang and python. I suspect it's
> down to the way I've written it. Any thoughts (or comments in general)
>
> Many thanks
>
> Matt
>
> ______________________________________________________________________
> This email may contain privileged or confidential information, which should
> only be used for the purpose for which it was sent by Xyratex. No further
> rights or licenses are granted to use such information. If you are not the
> intended recipient of this message, please notify the sender by return and
> delete it. You may not use, copy, disclose or rely on the information
> contained in it.
>
> Internet email is susceptible to data corruption, interception and
> unauthorised amendment for which Xyratex does not accept liability. While we
> have taken reasonable precautions to ensure that this email is free of
> viruses, Xyratex does not accept liability for the presence of any computer
> viruses in this email, nor for any losses caused as a result of viruses.
>
> Xyratex Technology Limited (03134912), Registered in England & Wales,
> Registered Office, Langstone Road, Havant, Hampshire, PO9 1SA.
>
> The Xyratex group of companies also includes, Xyratex Ltd, registered in
> Bermuda, Xyratex International Inc, registered in California, Xyratex
> (Malaysia) Sdn Bhd registered in Malaysia, Xyratex Technology (Wuxi) Co Ltd
> registered in The People's Republic of China and Xyratex Japan Limited
> registered in Japan.
> ______________________________________________________________________
>
> _______________________________________________
> Beginners mailing list
> Beginners@haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
http://www.haskell.org/pipermail/beginners/attachments/20081002/0734ecc1/attachment-0001.htm

------------------------------

Message: 4
Date: Wed, 1 Oct 2008 22:54:00 -0700
From: "Jason Dusek" <[EMAIL PROTECTED]>
Subject: Re: [Haskell-beginners] Perfect numbers
To: wman <[EMAIL PROTECTED]>
Cc: Matthew Williams <[EMAIL PROTECTED]>,
        beginners@haskell.org
Message-ID:
        <[EMAIL PROTECTED]>
Content-Type: text/plain; charset=UTF-8

On Wed, Oct 1, 2008 at 22:25, wman <[EMAIL PROTECTED]> wrote:
> First step would probably be using Ints instead of Integers.

  Doesn't seem to make a real difference in GHCi.

--
_jsn


Prelude> do_perfect [1..2000] :: [Integer]
[6,28,496]
it :: [Integer]
(4.22 secs, 169352736 bytes)
Prelude> do_perfect [1..2000] :: [Int]
[6,28,496]
it :: [Int]
(4.23 secs, 153699692 bytes)


------------------------------

Message: 5
Date: Thu, 2 Oct 2008 07:54:47 +0200
From: wman <[EMAIL PROTECTED]>
Subject: Re: [Haskell-beginners] Perfect numbers
To: "Matthew Williams" <[EMAIL PROTECTED]>
Cc: beginners@haskell.org
Message-ID:
        <[EMAIL PROTECTED]>
Content-Type: text/plain; charset="iso-8859-1"

factors :: Int -> [Int]
factors x = [z | z <- [1..(x `div` 2)], x `mod` z == 0]

is_perfect :: Int -> Bool
is_perfect x = sum(factors x) == x

do_perfect :: [Int] -> [Int]
do_perfect x = [z |z <- x, is_perfect z ]

main = print $ do_perfect [1..9000]
-- compile with ghc -O2, it's more than ten times faster for me
-- althought using 1..(x `div 2) instead of 1..x-1 is a bit of cheating ;-))



On Thu, Oct 2, 2008 at 6:45 AM, Matthew Williams <
[EMAIL PROTECTED]> wrote:

>  Hi Guys,
>
> I'm new to Haskell and I was wondering if you can help me:
>
> One of the first program's I tend to write when I'm looking at a new
> language is a program to generate a list of perfect numbers:
>
> --My First Perfect Number Generator
> factors :: Integer -> [Integer]
> factors x = [z | z <- [1..x-1], x `mod` z == 0]
>
> is_perfect :: Integer -> Bool
> is_perfect x = if sum(factors x) == x then True else False
>
> do_perfect :: [Integer] -> [Integer]
> do_perfect x = [z |z <- x, is_perfect z ]
>
> Then to run it:
> > do_perfect [1..9000]
>
> I'm using GHC to run it. My problem / question is this: It's running quite
> a lot slower than equivalent programs in erlang and python. I suspect it's
> down to the way I've written it. Any thoughts (or comments in general)
>
> Many thanks
>
> Matt
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
http://www.haskell.org/pipermail/beginners/attachments/20081002/4b56b37f/attachment.htm

------------------------------

_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://www.haskell.org/mailman/listinfo/beginners


End of Beginners Digest, Vol 4, Issue 1
***************************************

Reply via email to