[Haskell-cafe] Re: Math questions
Mujtaba Boori
mujtaba.boori at gmail.com
Thu May 27 04:19:21 EDT 2010
*Pete Chown and Dan Doel. Thank you for your solution. I actually It was not
homework . It was just a a past exam question trying to answer . *
**but your solution is very long , so I don't think he wants answer this
long in the exams. I think this answer agree100 f g = map f xs == map g xs
where xs = [1..100] from Richard O'Keefe
is do the job.
**Anyway , your solution help understand more about Haskell not only this
question . Many thanks to you guys.
On 27 May 2010 02:04, Dan Doel <dan.doel at gmail.com> wrote:
> On Wednesday 26 May 2010 5:38:57 pm Pete Chown wrote:
> > test :: (Eq a) => (Int -> a) -> (Int -> a) -> Bool
> > test f1 f2 = unsafePerformIO $ do
> > goodSoFar <- newIORef True
> > forLoop 1 100 $ \i ->
> > when (f1 i /= f2 i) $ writeIORef goodSoFar False
> > readIORef goodSoFar
>
> The problem with this algorithm is that it needlessly tests f1 against f2
> for
> all i, even when a non-matching value has has already been found. Using the
> power of call-with-current-continuation, I have constructed an algorithm
> that
> lacks this deficiency:
>
> import Control.Monad.Cont
>
> test f g = flip runCont id . callCC $ \escape ->
> do forM_ [1..100] $ \n ->
> when (f n /= g n) $
> escape False
> return True
>
> This should perform almost 75% less work in the testFunc1 case! It
> certainly
> feels much snappier.
>
> -- Dan
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
--
Mujtaba Ali Alboori
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20100527/46d8a7f8/attachment.html
More information about the Haskell-Cafe
mailing list