Re: [Haskell-cafe] Help me understand general recursion from cata- and anamorphism

2013-06-23 Thread Takayuki Muranushi
Dear all,

https://github.com/nushio3/practice/blob/master/recursion-schemes/FibTest.hs

After learning fix-point operators, I found an answer by myself.

```

fibBase :: (Integer -> Integer) -> Integer -> Integer
fibBase fib n
  | n <= 1= 1
  | otherwise = fib (n-1) + fib (n-2)

fibWithFix :: Integer -> Integer
fibWithFix = fix fibBase
```

I can say `fibBase` is free of recursion, despite the facts that apparently
it uses a name `fib` on RHS which it binds on the LHS, and that the entire
structure seems very similar to the recursive version of `fib` .



2013/6/16 Takayuki Muranushi 

> In an attempt to understand why cata- and anamorphisms are considered so
> important, I found multiple implications that you can write any recursive
> functions in terms of nonrecursive functions and ana, cata (am I right
> here?) so I'm trying to practice the rewrite by a few functions. I'm
> following a recipe found here:
>
> http://lambda-the-ultimate.org/node/4290
>
> ~~~
> Given a function that recurses on itself, do a partial CPS transform so
> that it only ever recurses on itself with tail calls. Then, convert the
> recursive calls to codata returns, so that the function either returns
> TheAnswer or StillWorking with enough parameters to describe the recursive
> call / continuation state. This codata can be built with an unfold and can
> be collapsed back down to the final answer with a fold.
> ~~~
>
>
> https://github.com/nushio3/practice/blob/master/lens/banana/CollatzTest.hs
> https://github.com/nushio3/practice/blob/master/lens/banana/FibTest.hs
>
> I find it difficult to understand the terminology, and the above attempts
> are only halfway done. I guess ( TheAnswer or StillWorking ) structure is
> the one found in iteratee/enumeratee. But I don't know how to "build a
> codata with unfold."
>
> I'd appreciate any advice.
>
> Best,
>
> --
> Takayuki MURANUSHI
> The Hakubi Center for Advanced Research, Kyoto University
> http://www.hakubi.kyoto-u.ac.jp/02_mem/h22/muranushi.html
>



-- 
Takayuki MURANUSHI
The Hakubi Center for Advanced Research, Kyoto University
http://www.hakubi.kyoto-u.ac.jp/02_mem/h22/muranushi.html
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Help me understand general recursion from cata- and anamorphism

2013-06-16 Thread Takayuki Muranushi
In an attempt to understand why cata- and anamorphisms are considered so
important, I found multiple implications that you can write any recursive
functions in terms of nonrecursive functions and ana, cata (am I right
here?) so I'm trying to practice the rewrite by a few functions. I'm
following a recipe found here:

http://lambda-the-ultimate.org/node/4290

~~~
Given a function that recurses on itself, do a partial CPS transform so
that it only ever recurses on itself with tail calls. Then, convert the
recursive calls to codata returns, so that the function either returns
TheAnswer or StillWorking with enough parameters to describe the recursive
call / continuation state. This codata can be built with an unfold and can
be collapsed back down to the final answer with a fold.
~~~


https://github.com/nushio3/practice/blob/master/lens/banana/CollatzTest.hs
https://github.com/nushio3/practice/blob/master/lens/banana/FibTest.hs

I find it difficult to understand the terminology, and the above attempts
are only halfway done. I guess ( TheAnswer or StillWorking ) structure is
the one found in iteratee/enumeratee. But I don't know how to "build a
codata with unfold."

I'd appreciate any advice.

Best,

-- 
Takayuki MURANUSHI
The Hakubi Center for Advanced Research, Kyoto University
http://www.hakubi.kyoto-u.ac.jp/02_mem/h22/muranushi.html
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe