I did not take it as a personal challenge.  But if
you are going to compare times a reasonable
approach would be:

a. Write the best program you can in each language
(e.g. if !y and x!y are available, use them.)
b. Compare programs in a range of fields, preferable
"useful" fields.  Thus my suggestion of summation,
sort, and index-of.



----- Original Message -----
From: Arie Groeneveld <[EMAIL PROTECTED]>
Date: Tuesday, August 14, 2007 3:48
Subject: Re: [Jprogramming] Power sets
To: Programming forum <[email protected]>

> Roger,
> 
> I regret I started this, because if you take this up
> as a kind of personal challenge against Haskell than
> this was not what I had in mind. If you want a worthy opponent
> I'm of no match (knowledge, experience) to your expertise
> and knowledge. I did take up programming in Haskell only
> a year ago, so I'm not an experienced programmer in Haskell.
> Still learning almost every day, same thing with J.
> Another thing is I have to get used to formulate things
> in English and that's not my daily cup of tea (not to use
> an excuse though).
> 
> > a. You did not indicate what the J time-space numbers 
> > were on the expressions.
> >
>    ts 'i4'
> 6e_6 448
> 
>    ts 'i9'
> 5e_6 448
> 
> To compare with Haskell I'll have to deal with, as
> Oleg Kobchenko mentioned, lazy evaluation. To have
> access to values in memory I have to come up with
> array's (in memory values) instead of list values
> which are only created when you need them. You only
> define the type and size (incl. infinity) of the list.
> 
> f.e.
> 
> list :: Int -> [Integer]
> list n = [1..n]
> or
> list = [1..]  -- infinite list
> 
> 
> Here is a summation result with a list of 1e6
> random values:
> 
> *Main> main
> Computation time: 4.192 sec
> ok.
> (4.19 secs, 1183297592 bytes)
> 
> First timing is an attempt to time just the the summation.
> Second timing is the total time of running the program.
> As you can see: no difference, meaning time is inclusive
> the creation of random values (as they are being accessed then).
> 
> With a trick (using the list values more than once) I can
> come up with:
> 
> *Main> main
> Computation time: 4.944 
> sec        I
> Computation time: 0.192 
> sec        II
> ok
> (5.14 secs, 1270145980 bytes)
> 
> Time I is inclusive the creation of random values
> during the summation.
> Time II: values exist already, so this value is the exclusive
> summation time.
> > b. +/i.n is not a good test as 2!n would give an 
> > instantaneous answer.  Please do the benchmarks
> > on random numbers.
> >
> Here's another nice thing of J: Combinations (2,n).
> Build in in J (probably highly optimized).
> To compare with Haskell I'll have to write some
> functions for that. So a fair comparison would be if
> I do the same in J.
> 
> Used functions in J:
> (not using the build in functions)
> 
> fac=: 3 : 'if. y=0 do. 1 else. */ 1+ i.y end.'
> comb=: 4 : '(fac y) % (fac x) * fac y-x'
>  
>    ts 'it=:2 comb 5000x'
> 0.625806 882816
>    it
> 12497500
> 
> but:
> 
>    ts '2!5000x'
> 5.4e_5 167552
> 
> 
> Same in Haskell:
> Straightforward (no clever things)
>  
> fac 0 =  1
> fac n = foldl (*) 1 [1..n]
> comb k n = fac n `div` (fac k * fac (n-k))
> 
> note: I don't use a strict fold here nor
> the build in function 'product'
> 
> main = do
>     time $ comb 2 5000 `seq` return ()
>     print $ comb 2 5000
> 
> *Main> main
> Computation time: 0.204 sec
> 12497500
> (0.41 secs, 93522164 bytes)
> 
> 
> Hopefully this will satisfy ;-)
> Again: I'm not promoting Haskell, I 'love' J as much!
> Since I know about Haskell and J I feel like a child in Legoland!
> 
> 
> Thanks
> 
> 
> @@i=arie
> 
> p.s.
> keep in mind the time zone difference in my responding
> to your e-mails.
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to