Jump to content

Power set: Difference between revisions

59 bytes removed ,  10 years ago
Line 810:
 
import (
"bytes"
"fmt"
"strconv"
Line 818 ⟶ 819:
// element is an interface, allowing different kinds of elements to be
// implemented and stored in sets.
type elementelem interface {
// an element must be distinguishable from other elements to satisfy
// the mathematical definition of a set. a.eq(b) must give the same
// result as b.eq(a).
eqEq(element) bool
// String result is used only for printable output. Given a, b where
// a.eq(b), it is not required that a.String() == b.String().
String() stringfmt.Stringer
}
 
// integer type satisfying element interface
type intEleInt int
 
func (i intEleInt) eqEq(e elementelem) bool {
if j, ok := e.(intEleInt); ok {
return ok return&& i == j
}
return false
}
 
func (i intEleInt) String() string {
return strconv.Itoa(int(i))
}
 
// a set type implemented asis a simpleslice listof elem's. methods will beare added to implement
// make it satisfy the element interface, allowing setsto ofallow setsnesting.
type set []elementelem
 
// uniqueness of elements can be ensured by using add method
func (s *set) addEleadd(e elementelem) {
if !s.hasElehas(e) {
*s = append(*s, e)
}
}
 
func (s *set) hasElehas(e elementelem) bool {
for _, ex := range *s {
if e.eqEq(ex) {
return true
}
Line 862 ⟶ 861:
}
 
// elem.Eq
// method to satify element interface
func (s set) eqEq(e elementelem) bool {
t, ok := e.(set)
if !ok {
Line 872 ⟶ 871:
}
for _, se := range s {
if !t.hasElehas(se) {
return false
}
Line 879 ⟶ 878:
}
 
// elem.String
// method to satify element interface
func (s set) String() string {
rvar :=buf "{"bytes.Buffer
buf.WriteRune('{')
for _, e := range s {
if len(r) > 1 {
rbuf.WriteRune(' += " "')
}
r += fmtbuf.SprintWriteString(e.String())
}
return r + "buf.WriteRune('}"')
return falsebuf.String()
}
 
Line 906 ⟶ 907:
func main() {
var s set
for _, i := range []intEleInt{1, 2, 2, 3, 4, 4, 4} {
s.addEleadd(i)
}
fmt.Println(s)
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.