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. (no subject) (Thomas Engel)
2. nested guards (Thomas Engel)
3. Re: nested guards (David Frey)
4. Re: nested guards (Stephen Tetley)
5. How memorize intermediate computation value[my brain is so
hurt]? ( anyzhen )
6. Re: How memorize intermediate computation value[my brain is
so hurt]? (Benjamin Edwards)
7. yet another monad question (Ovidiu Deac)
----------------------------------------------------------------------
Message: 1
Date: Fri, 3 Feb 2012 19:43:35 +0100
From: Thomas Engel <[email protected]>
Subject: [Haskell-beginners] (no subject)
To: [email protected]
Message-ID: <20120203184335.GA3249@siduxbox>
Content-Type: text/plain; charset=us-ascii
------------------------------
Message: 2
Date: Fri, 3 Feb 2012 19:55:03 +0100
From: Thomas Engel <[email protected]>
Subject: [Haskell-beginners] nested guards
To: [email protected]
Message-ID: <20120203185503.GA3284@siduxbox>
Content-Type: text/plain; charset=us-ascii
Hello,
I'm new to haskell. I want to write a function for a s-curve acceleration in
haskell.
A solution in VBA is already working.
Are there nested guards in haskell available or how can I rewrite this function?
The function should calculate the acceleration for a given distance, max
acceleration, velocity, jerk at time since start
acc_skurve::Float->Float->Float->Float->Float->Float
acc_skurve str acc v jerk taktuell
| str <= str2jerk |taktuell <= (0.5 * str /
jerk)**(1/3::Float) = jerk * taktuell
|taktuell <= (4 * str / jerk)**(1/3::Float)
= jerk**(2/3::Float) * 2**(2/3::Float) * str**(1/3::Float) - jerk *
taktuell
|taktuell <= (27/2 * str /
jerk)**(1/3::Float) = - jerk * taktuell + 2**(2/3::Float) * str**(1/3::Float)
* jerk**(2/3::Float)
|taktuell <= (32 * str /
jerk)**(1/3::Float) = -2 * 2**(2/3::Float) * str**(1/3::Float) *
jerk**(2/3::Float) + jerk * taktuell
| str > str2jerk && str < str2acc |taktuell <= acc / jerk
= jerk * taktuell
|taktuell <= - acc / 2 / jerk + sqrt(acc^3
+ 4 * str * jerk^2) / (2 * jerk * sqrt(acc)) = acc
|taktuell <= acc / 2 / jerk + sqrt(acc^3 +
4 * str * jerk^2) / (2 * jerk * sqrt(acc)) = acc / 2 - jerk * taktuell +
sqrt(acc^3 + 4 * str * jerk^2) / (2 * sqrt(acc))
|taktuell <= 3 * acc / 2 / jerk +
sqrt(acc^3 + 4 * str * jerk^2) / (2 * jerk * sqrt(acc)) = acc / 2 - jerk *
taktuell + sqrt(acc^3 + 4 * str * jerk^2) / (2 * sqrt(acc))
|taktuell <= sqrt(acc^3 + 4 * str *
jerk^2) / (sqrt(acc * jerk)) = - acc
|taktuell <= acc / jerk + sqrt(acc^3 + 4 *
str * jerk^2) / (sqrt(acc * jerk)) = - acc + jerk * taktuell -
sqrt(acc^3 + 4 * str * jerk^2) / sqrt(acc)
| str >= str2acc |taktuell <= acc / jerk =
jerk * taktuell
|taktuell <= v / acc =
acc
|taktuell <= acc / jerk + v / acc =
acc - jerk * taktuell + v * jerk / acc
|taktuell <= str / v = 0
|taktuell <= str / v + acc / jerk =
jerk * str / v - jerk * taktuell
|taktuell <= str / v + v / acc = -
acc
|taktuell <= str / v + acc / jerk + v / acc
= -(str / v + acc / jerk + v / acc - taktuell) * jerk
where str2jerk = 2 * acc^2 / jerk^2
str2acc = acc^2 * v + v^2 * jerk / (jerk * acc)
best regards
Thomas
------------------------------
Message: 3
Date: Fri, 03 Feb 2012 12:16:45 -0800
From: David Frey <[email protected]>
Subject: Re: [Haskell-beginners] nested guards
To: <[email protected]>
Message-ID: <[email protected]>
Content-Type: text/plain; charset=UTF-8; format=flowed
http://www.haskell.org/haskellwiki/Case
That link shows how to write a select function that offers
functionality similar to a switch statement in C. Then you could use
guards for the top-level switching and the select function for the
second level.
On Fri, 3 Feb 2012 19:55:03 +0100, Thomas Engel wrote:
> Hello,
>
> I'm new to haskell. I want to write a function for a s-curve
> acceleration in haskell.
> A solution in VBA is already working.
>
> Are there nested guards in haskell available or how can I rewrite
> this function?
>
> The function should calculate the acceleration for a given distance,
> max acceleration, velocity, jerk at time since start
>
> acc_skurve::Float->Float->Float->Float->Float->Float
> acc_skurve str acc v jerk taktuell
> | str <= str2jerk |taktuell <= (0.5 * str /
> jerk)**(1/3::Float) = jerk * taktuell
> |taktuell <= (4 * str /
> jerk)**(1/3::Float) = jerk**(2/3::Float) * 2**(2/3::Float) *
> str**(1/3::Float) - jerk * taktuell
> |taktuell <= (27/2 * str /
> jerk)**(1/3::Float) = - jerk * taktuell + 2**(2/3::Float) *
> str**(1/3::Float) * jerk**(2/3::Float)
> |taktuell <= (32 * str /
> jerk)**(1/3::Float) = -2 * 2**(2/3::Float) * str**(1/3::Float) *
> jerk**(2/3::Float) + jerk * taktuell
> | str > str2jerk && str < str2acc |taktuell <= acc / jerk
> = jerk *
> taktuell
>
> |taktuell <= - acc / 2 / jerk +
> sqrt(acc^3 + 4 * str * jerk^2) / (2 * jerk * sqrt(acc)) = acc
>
>
> |taktuell <= acc / 2 / jerk +
> sqrt(acc^3 + 4 * str * jerk^2) / (2 * jerk * sqrt(acc)) = acc /
> 2
> - jerk * taktuell + sqrt(acc^3 + 4 * str * jerk^2) / (2 * sqrt(acc))
>
> |taktuell <= 3 * acc / 2 / jerk
> + sqrt(acc^3 + 4 * str * jerk^2) / (2 * jerk * sqrt(acc)) = acc / 2
> -
> jerk * taktuell + sqrt(acc^3 + 4 * str * jerk^2) / (2 * sqrt(acc))
> |taktuell <= sqrt(acc^3 + 4 *
> str * jerk^2) / (sqrt(acc * jerk)) = - acc
>
>
> |taktuell <= acc / jerk +
> sqrt(acc^3 + 4 * str * jerk^2) / (sqrt(acc * jerk)) = -
> acc + jerk * taktuell - sqrt(acc^3 + 4 * str * jerk^2) / sqrt(acc)
>
> | str >= str2acc |taktuell <= acc / jerk
> = jerk * taktuell
>
> |taktuell <= v / acc
> = acc
> |taktuell <= acc / jerk + v / acc
> = acc - jerk * taktuell + v * jerk / acc
> |taktuell <= str / v
> = 0
> |taktuell <= str / v + acc / jerk
> = jerk * str / v - jerk * taktuell
> |taktuell <= str / v + v / acc
> = - acc
> |taktuell <= str / v + acc / jerk
> + v / acc = -(str / v + acc / jerk + v / acc - taktuell) * jerk
> where str2jerk = 2 * acc^2 / jerk^2
> str2acc = acc^2 * v + v^2 * jerk / (jerk * acc)
>
>
> best regards
> Thomas
>
> _______________________________________________
> Beginners mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/beginners
------------------------------
Message: 4
Date: Fri, 3 Feb 2012 22:30:58 +0000
From: Stephen Tetley <[email protected]>
Subject: Re: [Haskell-beginners] nested guards
Cc: [email protected]
Message-ID:
<CAB2TPRBbAfiuZ5ggJiMWkCPmzhker5p1eTK-qrA4BfFy5U=p...@mail.gmail.com>
Content-Type: text/plain; charset=ISO-8859-1
On 3 February 2012 20:16, David Frey <[email protected]> wrote:
> http://www.haskell.org/haskellwiki/Case
>
> That link shows how to write a select function that offers functionality
> similar to a switch statement in C. ?Then you could use guards for the
> top-level switching and the select function for the second level.
Yikes - that idiom is rather horrible, vis packing cases into a list
so they can be consumed by a function.
To solve the problem, I'd seek a more "mathy" description of the
algorithm i.e. one that doesn't use conditionals so heavily and work
from that rather than translate existing code.
------------------------------
Message: 5
Date: Sat, 4 Feb 2012 18:36:28 +0800
From: " anyzhen " <[email protected]>
Subject: [Haskell-beginners] How memorize intermediate computation
value[my brain is so hurt]?
To: " Beginners " <[email protected]>
Message-ID: <[email protected]>
Content-Type: text/plain; charset="iso-8859-1"
there have a lot of situation we need memorize intermediate computation value.
and use in further.
like this, compute nth fib question.
So,how memorize it?
i have an ugly solution.it used HashTable for memorization.
fib n table
| n==1 =1
| n==2 =1
| otherwise =
case lookup table of
Just v ->(v,table)
Nothing ->let (v,table') = fib (n-1) table in
let ( v',table'')= v + fib(n-2) table' in
(v',table'')
i am an beginner come from imperative programming language.
so fib memorize version program hurt my brain ... particular in Nothing
branches.
so do you have some good idea
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20120204/7e3146e5/attachment-0001.htm>
------------------------------
Message: 6
Date: Sat, 4 Feb 2012 10:47:15 +0000
From: Benjamin Edwards <[email protected]>
Subject: Re: [Haskell-beginners] How memorize intermediate computation
value[my brain is so hurt]?
To: anyzhen <[email protected]>
Cc: Beginners <[email protected]>
Message-ID:
<CAN6k4ngoGH--Ww-b9hrhRFkaYdOcHSoW63pUC=svv5xntgf...@mail.gmail.com>
Content-Type: text/plain; charset=ISO-8859-1
This might help :)
http://www.kennknowles.com/blog/2008/05/10/debugging-with-open-recursion-mixins/
On 4 February 2012 10:36, anyzhen <[email protected]> wrote:
> there have a lot of situation we need memorize intermediate computation
> value.
> and use in further.
> like this, compute nth fib question.
> So,how memorize it?
>
> i have an ugly solution.it used HashTable for memorization.
>
> fib n table
> ?| n==1 =1
> ?| n==2 =1
> ?| otherwise =
> ? case lookup table of
> ? ? Just v ? ->(v,table)
> ? ? Nothing ->let (v,table') = fib (n-1) table in
> ? ? ? ? ? ? ? ? ? ?let ( v',table'')= v + fib(n-2) table' in
> ? ? ? ? ? ? ? ? ? ?(v',table'')
>
> i am an beginner come from imperative programming language.
> so fib memorize version program hurt my brain ... particular in Nothing
> branches.
> so do you have some good idea
>
>
> _______________________________________________
> Beginners mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/beginners
>
------------------------------
Message: 7
Date: Sat, 4 Feb 2012 12:49:50 +0200
From: Ovidiu Deac <[email protected]>
Subject: [Haskell-beginners] yet another monad question
To: beginners <[email protected]>
Message-ID:
<cakvse7ud_2adkfpg9zhjows9j7g-vp5jxgrohwqbvezhezx...@mail.gmail.com>
Content-Type: text/plain; charset="iso-8859-1"
I have the following code which works fine:
type File = (String, String) --name and content
readDir :: String -> IO [File]
readDir dir = findRegularFiles dir >>= readFiles
where
findRegularFiles = find always (fileType ==? RegularFile)
readFiles paths = mapM readFile paths >>= return.zip paths
...and I would like to write the function readDir like this:
readDir :: String -> IO [File]
readDir = findRegularFiles >>= readFiles
where ...
...but I get the error:
grep.hs:46:32:
Couldn't match expected type `IO [FilePath]'
with actual type `[FilePath]'
Expected type: IO [FilePath] -> String -> IO [File]
Actual type: [FilePath] -> IO [File]
In the second argument of `(>>=)', namely `readFiles'
In the expression: findRegularFiles >>= readFiles
Can somebody please explain it?
It's not a big deal. I can keep the old version which works fine. My only
problem is that I thought I understood the monads better but apparently I
don't :)
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20120204/1778a4db/attachment-0001.htm>
------------------------------
_______________________________________________
Beginners mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/beginners
End of Beginners Digest, Vol 44, Issue 4
****************************************