[Haskell-cafe] If the local variable can be changed ...
zaxis
z_axis at 163.com
Wed Mar 10 00:45:37 EST 2010
Yes, we can imitate all of it (such as `when`, `until` and `for`) because
haskell is a good DSL language.
However, i feel it will be more convenient if the language itself supports
all these fundations.
jmillikin wrote:
>
> If your code performs a common task (such as conversion, accumulation,
> testing), then you should use higher-level constructs than a for loop.
> Using map, filter, foldr, and foldl will make it easier to write
> correct code.
>
> If you'd like to imitate a for loop exactly -- that is, to perform
> some action multiple times -- it's very easy to create a pure
> function. We do not have to stoop to mutable variables.
>
> -------------------------------------------------
> for :: Monad m => a -> (a -> Bool) -> (a -> a) -> (a -> m ()) -> m ()
> for start test step body = loop start where
> loop x = if test x
> then body x >> loop (step x)
> else return ()
>
> main = for 0 (< 100) (+ 1) $ \i -> do
> -- do something with i
> print i
> -------------------------------------------------
>
> On Tue, Mar 9, 2010 at 16:25, zaxis <z_axis at 163.com> wrote:
>>
>> In FP the variable can not be changed once created. Yes, it has much
>> advantage . However, i feel it is too strict. As we know, the local
>> variable is allocated on stack which is thread safe.
>>
>> So if the local variable can be changed, then we can use loop, etc. same
>> as
>> imperative languages. For example, for (i=0; i<100; i++) where `i` is a
>> local variable in function.
>>
>> Any suggestion is appreciated!
>>
>>
>>
>> -----
>> fac n = let { f = foldr (*) 1 [1..n] } in f
>> --
>> View this message in context:
>> http://old.nabble.com/If-the-local-variable-can-be-changed-...-tp27844016p27844016.html
>> Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.
>>
>> _______________________________________________
>> Haskell-Cafe mailing list
>> Haskell-Cafe at haskell.org
>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>
-----
fac n = let { f = foldr (*) 1 [1..n] } in f
--
View this message in context: http://old.nabble.com/If-the-local-variable-can-be-changed-...-tp27844016p27845844.html
Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.
More information about the Haskell-Cafe
mailing list