oldk1331 wrote:
>
> fix documentation and use a simpler implementation
Documentation parts is obvious (OK). Concerning implementation
my idea is to eventually have map1 exported (probably as 'map').
Trying to do this caused problems with overload resolution,
so for now it is local. However, I hope to work out this
and export this. Such 'map' is a general way to implement
various iterations over aggregates. From this point of
view it is more important than 'max' and 'min'. Of course
if all you want is 'max' and 'min', than your implementation
is simpler. However, I wrote 'max' and 'min' using 'map1'
because I feel that this way is better for future modifications.
> diff --git a/src/algebra/aggcat.spad b/src/algebra/aggcat.spad
> index 0a844a5b..8261664f 100644
> --- a/src/algebra/aggcat.spad
> +++ b/src/algebra/aggcat.spad
> @@ -120,11 +120,11 @@
> ++ For multisets \spadfun{members} gives result with no repetition.
> ++ See also \spadfun{parts}.
> max : ((S, S) -> Boolean, %) -> S
> - ++ min(p, u) returns maximal element of u with respect to total
> + ++ max(p, u) returns maximal element of u with respect to total
> ++ ordering predicate p. Error if u is empty.
> if S has OrderedSet then
> min : % -> S
> - ++ max(u) returns minimal element of u. Error if u is empty.
> + ++ min(u) returns minimal element of u. Error if u is empty.
> max : % -> S
> ++ max(u) returns maximal element of u. Error if u is empty.
> if S has BasicType then
> @@ -155,19 +155,13 @@
> count(f : S -> Boolean, c : %) == _+/[1 for x in parts c | f x]
> members x == parts x
>
> - map1(f : S -> Void, u : %) : Void ==
> - for x in parts u repeat
> - f(x)
> max(p : (S, S) -> Boolean, u : %) : S ==
> - empty?(u) => error "max of empty aggregate"
> - rr : Reference(Union(S, "none")) := ref("none")
> - f : S -> Void :=
> - s +->
> - (tu := deref(rr)) case "none" => setref(rr, s)
> - if p(tu::S, s) then
> - setref(rr, s)
> - map1(f, u)
> - deref(rr)::S
> + empty?(u) => error "empty aggregate"
> + l := parts(u)
> + r := first(l)
> + for x in rest(l) repeat
> + if p(r, x) then r := x
> + r
>
> if S has OrderedSet then
> min(u : %) : S == max((x, y) +-> (y < x), u)
>
> --
> You received this message because you are subscribed to the Google Groups
> "FriCAS - computer algebra system" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/fricas-devel.
> For more options, visit https://groups.google.com/d/optout.
>
--
Waldek Hebisch
--
You received this message because you are subscribed to the Google Groups
"FriCAS - computer algebra system" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/fricas-devel.
For more options, visit https://groups.google.com/d/optout.