Semigroups
In computer science, a Semigroup is an algebraic structure that has a set and a binary operation that takes two elements in the set and returns a Semigroup that has an associative operation. An associative operation is a binary operation that has a valid rule of replacement or transformation for expressions.
To start, we need to have a set and a specific binary operation, or we can make this behavior generic and define a protocol
as follows:
protocol Semigroup { func operation(_ element: Self) -> Self }
Any type that conforms to this protocol requires us to implement the operation
method. Here, self
presents the type that is conforming to this protocol. For instance, we can extend Int
to conform to the Semigroup protocol
and provide a summation on itself:
extension Int: Semigroup { func operation(_ element: Int) -> Int { return self + element } }
We can test this as follows:
let number: Int = 5 number.operation(3)
This test does not ensure the associativity...