Re: [m-users.] Cartesian product of two sets of things.
Julien Fischer <[email protected]>
| Newsgroups | gmane.comp.lang.mercury.general |
|---|---|
| Message-ID | <[email protected]> |
On Wed, 11 Oct 2023, Zoltan Somogyi wrote: > > On 2023-10-10 21:02 +11:00 AEDT, "Julien Fischer" <[email protected]> wrote: >> A big part of the difference would be that the nondet version sorts >> the elements and (redundantly) attempt to remove duplicates, whereas the >> det version just constructs the elements in reverse order directly. > > Another source of difference is that its lowest level operations > are tail recursive, while the lowest level operations in the nondet version > can't be tail recursive, because you can't recover a nondet stack frame > while the values of the variables it contains may be needed to find > another solution. > > You should note that even the det version in cproduct.m is not > as fast as it could be, because it adds each new item to the cross product > using a higher order call. Converting the sets to sorted lists and iterating > over the lists directly could replace those higher order calls with simple > unifications, which would make that version even faster. Granted, although with --intermod -O3 the compiler will do that for you with the det version as it is written. Julien. _______________________________________________ users mailing list [email protected] https://lists.mercurylang.org/listinfo/users