Send Beginners mailing list submissions to
[email protected]
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: another list comprehesion error (David Place)
2. Re: another list comprehesion error (Roelof Wobben)
3. Re: another list comprehesion error (David Place)
4. Re: another list comprehesion error (Roelof Wobben)
5. Re: another list comprehesion error (Thomas)
6. very impure [global] counter (Davi Santos)
7. FW: another list comprehesion error (Roelof Wobben)
8. Re: another list comprehesion error (Thomas)
----------------------------------------------------------------------
Message: 1
Date: Thu, 21 Jul 2011 14:05:14 -0400
From: David Place <[email protected]>
Subject: Re: [Haskell-beginners] another list comprehesion error
To: Roelof Wobben <[email protected]>
Cc: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset="iso-8859-1"
On Jul 21, 2011, at 1:27 PM, Roelof Wobben wrote:
> roelof :: a -> b -> c -> (a,b,c)
> roelof n = [(x y z) | x^2+Y^2=Z^2 <- x<-[1..n], y<- [1..n], z<-[1..n]]
>
> But I get this error : oefening.hs:2:30: parse error on input `='
Hi, Roelof.
This short amount of code has many syntax and semantic errors. May I suggest
that you might benefit from trying to make this function using only normal
function application and the basic list functions. I think you will learn
more about Haskell this way. Personally, i rarely use list comprehensions. I
think they are not very modular.
Also, it might help people to understand your background a little. This way
comments could be better focused. For instance, which other programming
languages do you know?
____________________
David Place
Owner, Panpipes Ho! LLC
http://panpipesho.com
[email protected]
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20110721/820fa873/attachment-0001.htm>
------------------------------
Message: 2
Date: Thu, 21 Jul 2011 18:47:05 +0000
From: Roelof Wobben <[email protected]>
Subject: Re: [Haskell-beginners] another list comprehesion error
To: <[email protected]>
Message-ID: <[email protected]>
Content-Type: text/plain; charset="iso-8859-1"
Oke,
So I can better goto the next chapter or look for a better book.
Im using now Programming in Haskell.
My background is that many years I have tried to programm in Delphi.
The last years I have tried C and C++ but these were to difficult for me with
header files.
I could make this with a for next loop and a if then if you like it that way ?
Roelof
________________________________
> Subject: Re: [Haskell-beginners] another list comprehesion error
> From: [email protected]
> Date: Thu, 21 Jul 2011 14:05:14 -0400
> CC: [email protected]
> To: [email protected]
>
> On Jul 21, 2011, at 1:27 PM, Roelof Wobben wrote:
>
> roelof :: a -> b -> c -> (a,b,c)
> roelof n = [(x y z) | x^2+Y^2=Z^2 <- x<-[1..n], y<- [1..n], z<-[1..n]]
>
> But I get this error : oefening.hs:2:30: parse error on input `='
>
> Hi, Roelof.
>
> This short amount of code has many syntax and semantic errors. May I
> suggest that you might benefit from trying to make this function using
> only normal function application and the basic list functions. I
> think you will learn more about Haskell this way. Personally, i rarely
> use list comprehensions. I think they are not very modular.
>
> Also, it might help people to understand your background a little.
> This way comments could be better focused. For instance, which other
> programming languages do you know?
>
> ____________________
> David Place
> Owner, Panpipes Ho! LLC
> http://panpipesho.com
> [email protected]<mailto:[email protected]>
>
>
------------------------------
Message: 3
Date: Thu, 21 Jul 2011 15:19:54 -0400
From: David Place <[email protected]>
Subject: Re: [Haskell-beginners] another list comprehesion error
To: Roelof Wobben <[email protected]>
Cc: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset=us-ascii
On Jul 21, 2011, at 2:47 PM, Roelof Wobben wrote:
> I could make this with a for next loop and a if then if you like it that way
> ?
I though it would be trivial, and perhaps it is. This seems to be a case where
the list comprehensions give quite a bit of help.
First of all, here is your function with all the syntax and semantic bugs
fixed. Please compare it closely to your version.
> roelof :: Int -> [(Int,Int,Int)]
> roelof n = [(x, y, z) | x<-[1..n], y<- [1..n], z<-[1..n], x^2+y^2 == z^2 ]
>
Here's a version using only functions without any of the syntactic sugar of
list comprehensions.
> triples xs ys zs = concatMap (\x -> concatMap (\y -> (map (\z -> (x,y,z))
> zs)) ys) xs
> roelof' n = filter (\(x,y,z) -> x^2+y^2 == z^2) $ triples [1..n] [1..n] [1..n]
It's quite unattractive. Please someone tell me there is a better way.
------------------------------
Message: 4
Date: Thu, 21 Jul 2011 19:29:48 +0000
From: Roelof Wobben <[email protected]>
Subject: Re: [Haskell-beginners] another list comprehesion error
To: <[email protected]>, <[email protected]>
Message-ID: <[email protected]>
Content-Type: text/plain; charset="iso-8859-1"
----------------------------------------
> Subject: Re: [Haskell-beginners] another list comprehesion error
> From: [email protected]
> Date: Thu, 21 Jul 2011 15:19:54 -0400
> CC: [email protected]
> To: [email protected]
>
> On Jul 21, 2011, at 2:47 PM, Roelof Wobben wrote:
>
> > I could make this with a for next loop and a if then if you like it that
> > way ?
>
> I though it would be trivial, and perhaps it is. This seems to be a case
> where the list comprehensions give quite a bit of help.
>
> First of all, here is your function with all the syntax and semantic bugs
> fixed. Please compare it closely to your version.
>
> > roelof :: Int -> [(Int,Int,Int)]
> > roelof n = [(x, y, z) | x<-[1..n], y<- [1..n], z<-[1..n], x^2+y^2 == z^2 ]
> >
>
Oke, I see that x<[1..n] part is now in the middle.
That I find quite confusing.
When I have made a list compresshion where I must print out a text I look like
this ;
roelof n x = [x | y <- [1..n]]
So I thought the syntax of a list compression would be [output | filter <-
input]
But the answer is now [ output | input <- filter] This is very confusing for
me.
>
> Here's a version using only functions without any of the syntactic sugar of
> list comprehensions.
>
> > triples xs ys zs = concatMap (\x -> concatMap (\y -> (map (\z -> (x,y,z))
> > zs)) ys) xs
> > roelof' n = filter (\(x,y,z) -> x^2+y^2 == z^2) $ triples [1..n] [1..n]
> > [1..n]
>
>
> It's quite unattractive. Please someone tell me there is a better way.
>
>
I thought of doing something like this in pseudo code :
For teller = 1 to n
for teller2 = 1 to n
antwoord = (teller1 ^2 + teller^2)^ 0.5
if antwoord == int(antwoord) then print x,y,z
Roelof
------------------------------
Message: 5
Date: Thu, 21 Jul 2011 23:40:52 +0200
From: Thomas <[email protected]>
Subject: Re: [Haskell-beginners] another list comprehesion error
To: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Hi!
On 21.07.2011 21:29, Roelof Wobben wrote:
> roelof n x = [x | y<- [1..n]]
Have you tried this?
What do you get for, say "roelof 4 5" ? Why?
Now try this instead:
roelof' n = [x | x <- [1..n]]
What do you get for "roelof' 4" ?
> So I thought the syntax of a list compression would be [output | filter<-
> input]
> But the answer is now [ output | input<- filter] This is very confusing for
> me.
Hm, in the terminology of the book you're using the list comprehension
[x | x <- [1..n]] reads
"all x such that x drawn from [1..n]"
So, you have a result (x) and a generator (x <- [1..n]).
What you call "filter" is called "guard" in the book.
So actually you have:
[ result | generator(s) ]
or (with guards):
[ result | generator(s), guards(s) ]
So, note that the comma (,) is a mere separator and the left arrow (<-)
forms part of the generators (everything else is a guard or an error).
Especially the term "input" is rather misleading.
Generators are explained in chapter 5.1 (page 38f), guards are explained
in 5.2 (page 39f). I'm not sure I can explain better than the book.
Maybe you should experiment with generators first and then advance to
the guards.
A few suggestions (without guards):
The list of the first 5 natural numbers.
The list of the first 5 odd numbers.
The list of all pairs (a, b) where a,b > 0, a <= b and b <= 5
Now you can try the last two with guards.
HTH,
Thomas
------------------------------
Message: 6
Date: Fri, 22 Jul 2011 04:10:55 -0300
From: Davi Santos <[email protected]>
Subject: [Haskell-beginners] very impure [global] counter
To: [email protected]
Message-ID:
<CANWsST9=hq5re_q1wbuxaqsew9nhuhq3xursmvcgtwcy5oe...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"
Hello all,
I have massive (parallel if possible) system calls to an external
non-deterministic program.
Each time it is executed, it creates a file depending on a command line
option 'opt' (input files path, for example).
How can I ensure the file name will be unique? maybe with a global counter?
My temporary solution have been to use a large random number:
-----------
mysteriousExecution :: String -> IO ()
mysteriousExecution opt = do
number <- rand
run $ "mysterious-command " ? opt ? " --create-file=" ? number
rand = do
a ? getStdRandom (randomR (1,999999999999999999999999999999999)) ? IO
Int
let r = take 20 $ randomRs ('a','z') (mkStdGen a) ? String
return r
========
I'm trying to avoid additional parameters to 'mysteriousExecution'.
I tried a counter also (to replace rand), but I don't know how could I start
it inside 'mysteriousExecution'.
c ? IO Counter
c = do
r ? newIORef 0 -- start
return (do
modifyIORef r (+1)
readIORef r)
If somebody says everything is wrong, ok.
I understand. 18 years of imperative programming world can damage the brain.
Thanks
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20110722/e0867294/attachment-0001.htm>
------------------------------
Message: 7
Date: Fri, 22 Jul 2011 09:13:28 +0000
From: Roelof Wobben <[email protected]>
Subject: [Haskell-beginners] FW: another list comprehesion error
To: <[email protected]>
Message-ID: <[email protected]>
Content-Type: text/plain; charset="iso-8859-1"
----------------------------------------
> From: [email protected]
> To: [email protected]
> Subject: RE: [Haskell-beginners] another list comprehesion error
> Date: Fri, 22 Jul 2011 06:46:03 +0000
>
>
>
>
> ----------------------------------------
> > Date: Thu, 21 Jul 2011 23:40:52 +0200
> > From: [email protected]
> > To: [email protected]
> > Subject: Re: [Haskell-beginners] another list comprehesion error
> >
> > Hi!
> >
> > On 21.07.2011 21:29, Roelof Wobben wrote:
> > > roelof n x = [x | y<- [1..n]]
> >
> > Have you tried this?
> > What do you get for, say "roelof 4 5" ? Why?
I get [5,5,5,,5]
And that the right answer according to the exercise
> > Now try this instead:
> > roelof' n = [x | x <- [1..n]]
> > What do you get for "roelof' 4" ?
A error message that a instance of print is missing.
> > A few suggestions (without guards):
> > The list of the first 5 natural numbers.
> > The list of the first 5 odd numbers.
> > The list of all pairs (a, b) where a,b > 0, a <= b and b <= 5
> >
> > Now you can try the last two with guards.
without guards
1) [x | x <- [1..5]]
2) cannot be done without guards and list comprehession generator [ 2,4 ..10]
does not work
3) cannot be done withut guards and list comprehession because of the a<=b
with guards.
1) has no need for guards.
2) [x | x <-[1..10], even x]
3] [ (a,b) | a<- [1..4], b<- [1..5], a<=b]
Roelof
------------------------------
Message: 8
Date: Fri, 22 Jul 2011 11:31:07 +0200
From: Thomas <[email protected]>
Subject: Re: [Haskell-beginners] another list comprehesion error
To: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
On 22.07.2011 08:46, Roelof Wobben wrote:
>> Now try this instead:
>> roelof' n = [x | x<- [1..n]]
>> What do you get for "roelof' 4" ?
> A error message that a instance of print is missing.
Then you have a typo somewhere...
>> Now you can try the last two with guards.
> 2) cannot be done without guards and list comprehession generator [ 2,4
> ..10] does not work
Sure it can:
[ 2*x-1 | x <- [1..5]]
and even easier:
[1,3..10]
or, better still (but not only a list comprehension any more):
take 5 [1, 3..]
> 3) cannot be done withut guards and list comprehession because of the a<=b
This, too, can be done:
[ (b, a) | a <- [1..5], b <- [1..a]]
Regards,
Thomas
------------------------------
_______________________________________________
Beginners mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/beginners
End of Beginners Digest, Vol 37, Issue 44
*****************************************