guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Idiomatic Guile for semigroup/monoid/group?


From: Maxime Devos
Subject: Re: Idiomatic Guile for semigroup/monoid/group?
Date: Sun, 02 Jan 2022 10:46:43 +0000
User-agent: Evolution 3.38.3-1

Stuart Hungerford schreef op zo 02-01-2022 om 10:45 [+1100]:
> In Haskell/Idris/Purescript/Swift/Rust I'd be looking to
> typeclasses/protocols or traits to model a semigroup, monoid or group.
> In OOP languages I'd be looking to some kind of abstract base class to
> model each structure.
> 
> What would the idiomatic Guile forms be to work with these structures?
> Would it involve GOOPS or records?

I wouldn't recommend using GOOPS methods, because a carrier set can
have many groups.

E.g., on the rational numbers (<rational> in GOOPS), both the
multiplication group and the addition group can be defined, but they
aren't isomorphic. (I'm ignoring 0 here)

My suggestion is to do as Haskell does, but make type class instances
explicit.

E.g., in Haskell one could define exponentiation (multiplicative) /
repeated addition (additive, not sure about standard terminology) as
something like

-- Not sure about the exact syntax, it has been a while!
exp :: Group G => Integer -> G -> G
exp 0 _ = identity
exp (+ 1 n) g = g * exp n g

This can be made more explicit:

-- first argument: identity element
-- second argument: function inverting an element
-- third argument: multiplication
data Group G = Group G (G -> G) (G -> G -> G)
identity :: Group G -> G
identity = _ -- maybe shorten to 'id'
mult :: Group G -> G -> G -> G -- maybe shorten to '*' in Scheme
mult = _
inverse :: Group G -> G -> G -- maybe shorten to '⁻¹' in Scheme

exp :: Group G -> Integer -> G -> G
exp gr 0 _ = identity gr
exp gr (+ 1 n) g = mult gr g (exp gr n g)

The downside is that passing all these 'Group G' objects around
might be a bit tedious.

Anyway, possibly things like this are already implemented in Theme-D
(not sure though): looking at the properties of Theme-D listed at
<https://www.tohoyn.fi/theme-d/>:

* [...]
* Static type system
* An object system
* A module system
* *Statically* and dynamically dispatched multimethods (emphasis mine)
* Parametrized (type parameters) classes, types, and procedures
* [...]
* Numeric tower
* [...]

Greetings,
Maxime.

Attachment: signature.asc
Description: This is a digitally signed message part


reply via email to

[Prev in Thread] Current Thread [Next in Thread]