На этом шаге мы завершим рассмотрение примера реализации пользовательского типа с единственным значением.
Тип NLogic представляет собой законченный логический тип данных для применения в системах нечеткой логики, который можно использовать подобно любым другим пользовательским типам.
То есть значения типа *NLogic можно сохранять в срезах, в виде ключей и значений в отображениях. Приведем пример использования значений типа NLogic.
func main() { a, _ := nlogic.New(0) b, _ := nlogic.New(.25) c, _ := nlogic.New(.75) d := c.Copy() if err := d.Set(1); err != nil { fmt.Println(err) } process(a, b, c, d) s := []*nlogic.NLogic{a, b, c, d} fmt.Println(s) } func process(a, b, c, d *nlogic.NLogic) { fmt.Println("Исходные значения:", a, b, c, d) fmt.Println("Not: ", a.Not(), b.Not(), c.Not(), d.Not()) fmt.Println("Not Not: ", a.Not().Not(), b.Not().Not(), c.Not().Not(), d.Not().Not()) fmt.Print("0.And(.25)→", a.And(b), "• .25.And(.75)→", b.And(c), "• .75.And(1)→", c.And(d), " • .25.And(.75,1)→", b.And(c, d), "\n") fmt.Print("0.Or(.25)→", a.Or(b), "• .25.Or(.75)→", b.Or(c), "• .75.Or(1)→", c.Or(d), " • .25.Or(.75,1)→", b.Or(c, d), "\n") fmt.Println("a < c, a == c, a > c:", a.Less(c), a.Equal(c), c.Less(a)) fmt.Println("Bool: ", a.Bool(), b.Bool(), c.Bool(), d.Bool()) fmt.Println("Float: ", a.Float(), b.Float(), c.Float(), d.Float()) }
Архив с примером можно взять здесь.
На следующем шаге начнем рассматривать еще один пример, демонстрирующий применение объектно-ориентированного подхода в языке Go.