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...