The constructors are hidden by tail and head.
Let me introduce a new function, cons, which also hides the constructors.
These functions are related by
head (cons x xs) = x
tail (cons x xs) = xs
Now I recode fibmatch as
fibmatch xs = cons _ (cons _ xs)
which gives
fib | head xs =:= 1
& head (tail xs) =:= 1 = xs
where
xs = cons _ (cons _ (zipWith (+) xs (tail xs)))
now satisfy the conditions on xs
fib = xs
where
xs = cons 1 (cons 1 (zipWith (+) xs (tail xs)))
now eliminate the renaming
fib = cons 1 (cons 1 (zipWith (+) fib (tail fib)))
On Mon, 21 Dec 2015, at 09:15, Sebastian Hanowski <sebastian_hanowski_at_gmx.de> wrote:
> On Tue, Dec 15, 2015 at 03:44:34PM +0100, Michael Hanus wrote:
> [...]
> > Hence, the challenge is open...
>
> This is my last resort:
>
> fibmatch (tail (tail xs)) = xs
>
> fib | head xs =:= 1
> & head (tail xs) =:= 1 = xs
> where
> xs = fibmatch (zipWith (+) xs (tail xs))
>
> No non-linear patterns. No (=:<=). And no constructors.
>
> But unfortunately it features too much cyclicity which I had liked to avoid.
>
> Think it's time now for a principled retreat.
>
>
> Best regards
>
> Sebastian
> _______________________________________________
> curry mailing list
> curry_at_lists.RWTH-Aachen.DE
> http://MailMan.RWTH-Aachen.DE/mailman/listinfo/curry
_______________________________________________
curry mailing list
curry_at_lists.RWTH-Aachen.DE
http://MailMan.RWTH-Aachen.DE/mailman/listinfo/curry
Received on Mo Dez 21 2015 - 23:30:44 CET