Sergio Antoy wrote:
> Sebastian,
>
> Below is another technique, in addition to Bernd's, to simulate
> the run (I call it need) time choice semantics. Probably, it is
> less efficient. Runs under pakcs.
>
> Cheers,
> Sergio
>
>
> getAllValues x = findall (=:= x)
> chooseValue (u:v) = u ? chooseValue v
>
> data Color = Red | Green
> Color = Red ? Green
> data Tree a = Leaf | Node a (Tree a) (Tree a)
> Tree a = Leaf ? Node (chooseValue b) (Tree a) (Tree a)
> where b = getAllValues a
>
> test = Node Red (Node Green Leaf Leaf) Leaf =:= Tree Color
>
This technique can turn bad, however, in some cases. The reason is that
the definition (runTimeChoice = chooseValue . getAllValues) has to
compute normal forms to be correct. Thus, if you either write
Tree a = Leaf ?
Node (runTimeChoice b)
(runTimeChoice (Tree a))
(runTimeChoice (Tree a))
or extend the Color type by a recursive constructor:
data Color = Mix Color Color | Read | Green
you get infinite search branches.
Also, any of the techniques relies on breadth first search, and in
consequence pakcs is not the right environment for this.
Greetings
Bernd
_______________________________________________
curry mailing list
curry_at_lists.RWTH-Aachen.DE
http://MailMan.RWTH-Aachen.DE/mailman/listinfo/curry
Received on Mo Dez 11 2006 - 10:15:55 CET