Hi,
On 19.07.2009, at 22:18, Sebastian Fischer wrote:
> For those who consider |foldr1| a way too suspicious function, here
> is another example: computing a sublist non-deterministically is
> *filtering* it with a predicate that yields either True or False [1]:
>
> sublist = filter (\_ -> True?False)
>
> The filter function is probably much more tangible than foldr1 and
> this definition of sublist has a very declarative reading: for each
> element in the list do or do not keep it non-deterministically.
This is very cool. It looks like most of the higher order functions
that take a predicate can be used in a similar way.
takeWhile (\_ -> False ? True) -- non-deterministic
version of inits
dropWhile (\_ -> False ? True) -- non-deterministic version
of tails
fromJust . find (\_ -> False ? True) -- non-deterministic
enumeration of all list elements
sortBy (\_ _ -> False ? True) -- all permutations
insertBy (\_ _ -> False ? True) -- inserts an element at a
non-deterministic position
I especially like the implementation of perms by means of sortBy. In
fact this is exactly the definition you provided as we have sortBy le
= foldr (insertBy le) [].
Cheers, Jan
_______________________________________________
curry mailing list
curry_at_lists.RWTH-Aachen.DE
http://MailMan.RWTH-Aachen.DE/mailman/listinfo/curry
Received on Di Jul 28 2009 - 11:02:15 CEST