From 9bd34c97d05499a9dc5922481470de04efa147aa Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Wed, 8 Apr 2015 00:34:47 +0200 Subject: Split files --- ops.go | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 ops.go (limited to 'ops.go') diff --git a/ops.go b/ops.go new file mode 100644 index 0000000..5fd61cc --- /dev/null +++ b/ops.go @@ -0,0 +1,82 @@ +package main + +import ( + "container/list" + "log" +) + +var ( + alphabet *list.List + zero, one *list.Element +) + +func init() { + alphabet = list.New() + for i := 0; i <= 1000; i++ { + alphabet.PushBack(i) + } + zero = alphabet.Front() + one = zero.Next() +} + +// next returns next char in alphabet +func next(n *list.Element) *list.Element { + if nxt := n.Next(); nxt != nil { + return nxt + } + log.Fatal("out of range", n.Value) + return nil +} + +// prev returns previous char in alphabet +func prev(n *list.Element) *list.Element { + if prv := n.Prev(); prv != nil { + return prv + } + return zero +} + +// add defines addition +func add(m, n *list.Element) *list.Element { + if m == zero { + return n + } + return next(add(prev(m), n)) +} + +// times defines mutiplication +func times(m, n *list.Element) *list.Element { + if m == zero { + return zero + } + return add(times(prev(m), n), n) +} + +// pot defines power function +func pot(m, n *list.Element) *list.Element { + if n == zero { + return one + } + return times(pot(m, prev(n)), m) +} + +// sub defines substraction +func sub(m, n *list.Element) *list.Element { + if n == zero { + return m + } + return prev(sub(m, prev(n))) +} + +// scan lookups element representation +func scan(n int) *list.Element { + if n > alphabet.Len() { + log.Fatal("out of range") + return nil + } + e := alphabet.Front() + for i := 0; i < n; i++ { + e = e.Next() + } + return e +} -- cgit v1.2.3