Documentation ¶
Index ¶
- Constants
- Variables
- func Bool2Cx(b bool) complex128
- func BoundingBoxString(s string) (w int, h int)
- func Check(err error)
- func Compare(a, b Val) int
- func Cx2Str(c complex128) string
- func FillString(w, h int, s string) []string
- func GetVectorOfScalarFloats(a Val) []float64
- func GetVectorOfScalarInts(a Val) []int
- func Mod(x int, modulus int) int
- func Must(predicate bool)
- func ParseCx(s string) complex128
- func Product(v []int) int
- func RenderBoxString(sss [][]string, border int) string
- func RenderPrettyMatrix(mat Mat) string
- func SameRank(a, b *Mat) bool
- func SameShape(a, b *Mat) bool
- type Box
- func (a Box) Compare(x Val) int
- func (o Box) GetScalarCx() complex128
- func (o Box) GetScalarFloat() float64
- func (o Box) GetScalarInt() int
- func (o Box) GetScalarOrNil() Val
- func (o Box) Pretty() string
- func (o Box) Ravel() []Val
- func (o Box) Shape() []int
- func (o Box) Size() int
- func (o Box) String() string
- func (o Box) ValEnum() ValEnum
- type Break
- type Cond
- type Context
- type Continue
- type Def
- type Dyad
- type DyadicFunc
- func MkEachOpDyadic(name string, fn DyadicFunc) DyadicFunc
- func MkInnerProduct(name string, fn1, fn2 DyadicFunc) DyadicFunc
- func MkOuterProduct(name string, fn DyadicFunc) DyadicFunc
- func WrapCxBoolDyadic(fn FuncCxCxBool) DyadicFunc
- func WrapCxDyadic(fn FuncCxCxCx) DyadicFunc
- func WrapFloatBoolDyadic(fn FuncFloatFloatBool) DyadicFunc
- func WrapFloatDyadic(fn FuncFloatFloatFloat) DyadicFunc
- func WrapMatMatDyadic(fn DyadicFunc) DyadicFunc
- type Expression
- type FuncCxCxBool
- type FuncCxCxCx
- type FuncFloatFloatBool
- type FuncFloatFloatFloat
- type IndexedValSlice
- type Lex
- type List
- type Literal
- type Mat
- func (a Mat) Compare(x Val) int
- func (o Mat) GetScalarCx() complex128
- func (o Mat) GetScalarFloat() float64
- func (o Mat) GetScalarInt() int
- func (o Mat) GetScalarOrNil() Val
- func (o Mat) Pretty() string
- func (o Mat) PrettyMatrix(vec []string) string
- func (o Mat) Ravel() []Val
- func (o Mat) Shape() []int
- func (o Mat) Size() int
- func (o Mat) String() string
- func (o Mat) ValEnum() ValEnum
- type Matcher
- type Monad
- type MonadicFunc
- type Num
- func (a Num) Compare(x Val) int
- func (o Num) GetScalarCx() complex128
- func (o Num) GetScalarFloat() float64
- func (o Num) GetScalarInt() int
- func (o Num) GetScalarOrNil() Val
- func (o Num) Pretty() string
- func (o Num) Ravel() []Val
- func (o Num) Shape() []int
- func (o Num) Size() int
- func (o Num) String() string
- func (o Num) ValEnum() ValEnum
- type Number
- type Parser
- func (p *Parser) ParseDef(lex *Lex, i int) (*Def, int)
- func (p *Parser) ParseExpr(lex *Lex, i int) (z Expression, zi int)
- func (p *Parser) ParseIf(lex *Lex, i int) (*Cond, int)
- func (p *Parser) ParseSeq(lex *Lex, i int) (*Seq, int)
- func (p *Parser) ParseSquare(lex *Lex, i int) ([]Expression, int)
- func (p *Parser) ParseWhile(lex *Lex, i int) (*While, int)
- type Seq
- type StringExtensionFunc
- type Subscript
- type Token
- type TokenType
- type Val
- type ValEnum
- type Variable
- type While
Constants ¶
View Source
const DefaultAxis = -1
View Source
const RE_COMPLEX = RE_REAL + `?([+-][jJ])` + RE_REAL
View Source
const RE_COMPLEX_SPLIT = `(.*)([+-][jJ])(.*)`
View Source
const RE_JUST_OPERATOR = `([-+*/\\,&|!=<>]+|[a-z][A-Za-z0-9_]*)`
View Source
const RE_KEYWORD = `(def|if|then|elif|else|fi|while|do|done|break|continue)\b`
View Source
const RE_OPERATOR = `([-+*/\\,&|!=<>]+|[a-z][A-Za-z0-9_]*[/\\]?)`
View Source
const RE_REAL = `([-+]?[0-9]+([.][0-9]+)?([eE][-+]?[0-9]+)?)`
Variables ¶
View Source
var CX_REGEXP = `([-+0-9.eE]+)(([-+])j([-+0-9.eE]+))?`
View Source
var IdentityValueOfDyadic = map[string]Val{ "+": Zero, "-": Zero, "or": Zero, "!=": Zero, "<": Zero, ">": Zero, "*": One, "div": One, "**": One, "and": One, "==": One, ">=": One, "<=": One, }
If not listed, we will use Zero. TODO: have a way to user-define an identity operator (into the Context).
View Source
var MatchClose = regexp.MustCompile(`^[)]`).FindStringSubmatch
View Source
var MatchCloseCurly = regexp.MustCompile(`^[}]`).FindStringSubmatch
View Source
var MatchCloseSquare = regexp.MustCompile(`^[]]`).FindStringSubmatch
View Source
var MatchComplex = regexp.MustCompile(`^` + RE_COMPLEX).FindStringSubmatch
View Source
var MatchComplexSplit = regexp.MustCompile(RE_COMPLEX_SPLIT).FindStringSubmatch
View Source
var MatchCx = regexp.MustCompile(CX_REGEXP)
View Source
var MatchEach = regexp.MustCompile("^" + RE_JUST_OPERATOR + `[~]`).FindStringSubmatch
View Source
var MatchInnerProduct = regexp.MustCompile("^" + RE_JUST_OPERATOR + "[.]" + RE_JUST_OPERATOR).FindStringSubmatch
View Source
var MatchKeyword = regexp.MustCompile("^" + RE_KEYWORD).FindStringSubmatch
View Source
var MatchNumber = regexp.MustCompile(`^` + RE_REAL).FindStringSubmatch
View Source
var MatchOpen = regexp.MustCompile(`^[(]`).FindStringSubmatch
View Source
var MatchOpenCurly = regexp.MustCompile(`^[{]`).FindStringSubmatch
View Source
var MatchOpenSquare = regexp.MustCompile(`^[[]`).FindStringSubmatch
View Source
var MatchOperator = regexp.MustCompile("^" + RE_OPERATOR).FindStringSubmatch
View Source
var MatchOuterProduct = regexp.MustCompile("^[.][.]" + RE_JUST_OPERATOR).FindStringSubmatch
View Source
var MatchReduce = regexp.MustCompile("^" + RE_JUST_OPERATOR + `[/]`).FindStringSubmatch
View Source
var MatchScan = regexp.MustCompile("^" + RE_JUST_OPERATOR + `[\\]`).FindStringSubmatch
View Source
var MatchSemi = regexp.MustCompile(`^[;\n]`).FindStringSubmatch
View Source
var MatchString = regexp.MustCompile(`^(["]([^"\\]|[\\].)*["])`).FindStringSubmatch
View Source
var MatchVariable = regexp.MustCompile(`^([A-Z_][A-Za-z0-9_]*)`).FindStringSubmatch
View Source
var MatchWhite = regexp.MustCompile(`^([ \t\r]*)`).FindStringSubmatch
View Source
var One = &Num{1.0}
View Source
var StandardDyadics = map[string]DyadicFunc{ "member": dyadicMember, "e": dyadicMember, "j": WrapMatMatDyadic(WrapCxDyadic(cxcxJ)), "rect": WrapMatMatDyadic(WrapCxDyadic(cxcxRect)), "rho": dyadicRho, "p": dyadicRho, "transpose": dyadicTranspose, ",": dyadicCatenate, "laminate": dyadicLaminate, "rot": dyadicRot, "take": dyadicTake, "drop": dyadicDrop, "compress": dyadicCompress, "expand": dyadicExpand, `\`: dyadicExpand, "==": WrapMatMatDyadic(WrapCxBoolDyadic( func(a, b complex128) bool { return a == b })), "!=": WrapMatMatDyadic(WrapCxBoolDyadic( func(a, b complex128) bool { return a != b })), "<": WrapMatMatDyadic(WrapFloatBoolDyadic( func(a, b float64) bool { return a < b })), ">": WrapMatMatDyadic(WrapFloatBoolDyadic( func(a, b float64) bool { return a > b })), "<=": WrapMatMatDyadic(WrapFloatBoolDyadic( func(a, b float64) bool { return a <= b })), ">=": WrapMatMatDyadic(WrapFloatBoolDyadic( func(a, b float64) bool { return a >= b })), "and": WrapMatMatDyadic(WrapFloatBoolDyadic(ffand)), "or": WrapMatMatDyadic(WrapFloatBoolDyadic(ffor)), "xor": WrapMatMatDyadic(WrapFloatBoolDyadic(ffxor)), "+": WrapMatMatDyadic(WrapCxDyadic( func(a, b complex128) complex128 { return a + b })), "-": WrapMatMatDyadic(WrapCxDyadic( func(a, b complex128) complex128 { return a - b })), "*": WrapMatMatDyadic(WrapCxDyadic( func(a, b complex128) complex128 { return a * b })), "/": WrapMatMatDyadic(WrapCxDyadic( func(a, b complex128) complex128 { return a / b })), "div": WrapMatMatDyadic(WrapCxDyadic( func(a, b complex128) complex128 { return a / b })), "**": WrapMatMatDyadic(WrapCxDyadic( func(a, b complex128) complex128 { return cmplx.Pow(a, b) })), "remainder": WrapMatMatDyadic(WrapFloatDyadic( func(a, b float64) float64 { return math.Remainder(a, b) })), "mod": WrapMatMatDyadic(WrapFloatDyadic( func(a, b float64) float64 { return math.Mod(a, b) })), "atan": WrapMatMatDyadic(WrapFloatDyadic( func(a, b float64) float64 { return math.Atan2(a, b) })), "copysign": WrapMatMatDyadic(WrapFloatDyadic( func(a, b float64) float64 { return math.Copysign(a, b) })), "dim": WrapMatMatDyadic(WrapFloatDyadic( func(a, b float64) float64 { return math.Dim(a, b) })), "hypot": WrapMatMatDyadic(WrapFloatDyadic( func(a, b float64) float64 { return math.Hypot(a, b) })), "isInf": WrapMatMatDyadic(WrapFloatBoolDyadic( func(a, b float64) bool { return math.IsInf(a, int(b)) })), "jn": WrapMatMatDyadic(WrapFloatDyadic( func(a, b float64) float64 { return math.Jn(int(a), b) })), "yn": WrapMatMatDyadic(WrapFloatDyadic( func(a, b float64) float64 { return math.Yn(int(a), b) })), }
View Source
var StandardMonadics = map[string]MonadicFunc{ "box": monadicBox, "unbox": monadicUnbox, "b": monadicBox, "u": monadicUnbox, "s2b": monadicS2B, "b2s": monadicB2S, "up": monadicUp, "down": monadicDown, "transpose": transposeMonadic, ",": ravelMonadic, "rot": rotMonadic, "iota": iotaMonadic, "iota1": iota1Monadic, "rho": rhoMonadic, "i": iotaMonadic, "i1": iota1Monadic, "p": rhoMonadic, "j": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return complex(0.0, 1.0) * b })), "real": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return complex(real(b), 0.0) })), "imag": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return complex(imag(b), 0.0) })), "rect": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { Must(imag(b) == 0) return cmplx.Rect(1.0, real(b)) })), "isInf": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return Bool2Cx(cmplx.IsInf(b)) })), "isNaN": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return Bool2Cx(cmplx.IsNaN(b)) })), "asin": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return cmplx.Asin(b) })), "acos": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return cmplx.Acos(b) })), "atan": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return cmplx.Atan(b) })), "sin": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return cmplx.Sin(b) })), "cos": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return cmplx.Cos(b) })), "tan": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return cmplx.Tan(b) })), "asinh": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return cmplx.Asinh(b) })), "acosh": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return cmplx.Acosh(b) })), "atanh": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return cmplx.Atanh(b) })), "sinh": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return cmplx.Sinh(b) })), "cosh": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return cmplx.Cosh(b) })), "tanh": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return cmplx.Tanh(b) })), "exp": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return cmplx.Exp(b) })), "exp2": WrapMatMonadic(WrapFloatMonadic(func(b float64) float64 { return math.Exp2(b) })), "expm1": WrapMatMonadic(WrapFloatMonadic(func(b float64) float64 { return math.Expm1(b) })), "log": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return cmplx.Log(b) })), "log10": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return cmplx.Log10(b) })), "log2": WrapMatMonadic(WrapFloatMonadic(func(b float64) float64 { return math.Log2(b) })), "log1p": WrapMatMonadic(WrapFloatMonadic(func(b float64) float64 { return math.Log1p(b) })), "ceil": WrapMatMonadic(WrapFloatMonadic(func(b float64) float64 { return math.Ceil(b) })), "floor": WrapMatMonadic(WrapFloatMonadic(func(b float64) float64 { return math.Floor(b) })), "round": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return complex(math.Round(real(b)), math.Round(imag(b))) })), "round1": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return complex(math.Round(real(10*b))/10, math.Round(imag(10*b))/10) })), "round2": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return complex(math.Round(real(100*b))/100, math.Round(imag(100*b))/100) })), "round3": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return complex(math.Round(real(1000*b))/1000, math.Round(imag(1000*b))/1000) })), "round4": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return complex(math.Round(real(10000*b))/10000, math.Round(imag(10000*b))/10000) })), "round5": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return complex(math.Round(real(100000*b))/100000, math.Round(imag(100000*b))/100000) })), "round6": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return complex(math.Round(real(1000000*b))/1000000, math.Round(imag(1000000*b))/10000000) })), "round7": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return complex(math.Round(real(10000000*b))/10000000, math.Round(imag(10000000*b))/100000000) })), "round8": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return complex(math.Round(real(100000000*b))/100000000, math.Round(imag(100000000*b))/1000000000) })), "round9": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return complex(math.Round(real(1000000000*b))/1000000000, math.Round(imag(1000000000*b))/10000000000) })), "roundToEven": WrapMatMonadic(WrapFloatMonadic(func(b float64) float64 { return math.RoundToEven(b) })), "ki": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return 1024 * b })), "mi": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return 1024 * 1024 * b })), "gi": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return 1024 * 1024 * 1024 * b })), "ti": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return 1024 * 1024 * 1024 * 1024 * b })), "pi": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return 1024 * 1024 * 1024 * 1024 * 1024 * b })), "ei": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return 1024 * 1024 * 1024 * 1024 * 1024 * 1024 * b })), "ks": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return 1000 * b })), "ms": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return 1000 * 1000 * b })), "gs": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return 1000 * 1000 * 1000 * b })), "ts": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return 1000 * 1000 * 1000 * 1000 * b })), "ps": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return 1000 * 1000 * 1000 * 1000 * 1000 * b })), "es": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return 1000 * 1000 * 1000 * 1000 * 1000 * 1000 * b })), "millis": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return b / 1000 })), "micros": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return b / 1000 / 1000 })), "nanos": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return b / 1000 / 1000 / 1000 })), "picos": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return b / 1000 / 1000 / 1000 / 1000 })), "div": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return 1 / b })), "cbrt": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { if imag(b) == 0 { return complex(math.Cbrt(real(b)), 0) } else { return cmplx.Pow(b, complex(1.0/3.0, 0)) } })), "sqrt": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return cmplx.Sqrt(b) })), "double": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return b + b })), "square": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return b * b })), "sgn": WrapMatMonadic(WrapFloatMonadic(func(b float64) float64 { if b < 0 { return -1 } else if b > 0 { return +1 } else if b == 0 { return 0 } else { panic("cannot sgn") } })), "abs": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return complex(cmplx.Abs(b), 0) })), "phase": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return complex(cmplx.Phase(b), 0.0) })), "erf": WrapMatMonadic(WrapFloatMonadic(func(b float64) float64 { return math.Erf(b) })), "erfc": WrapMatMonadic(WrapFloatMonadic(func(b float64) float64 { return math.Erfc(b) })), "erfinv": WrapMatMonadic(WrapFloatMonadic(func(b float64) float64 { return math.Erfinv(b) })), "erfcinv": WrapMatMonadic(WrapFloatMonadic(func(b float64) float64 { return math.Erfcinv(b) })), "gamma": WrapMatMonadic(WrapFloatMonadic(func(b float64) float64 { return math.Gamma(b) })), "inf": WrapMatMonadic(WrapFloatMonadic(func(b float64) float64 { return math.Inf(int(b)) })), "y0": WrapMatMonadic(WrapFloatMonadic(func(b float64) float64 { return math.Y0(b) })), "y1": WrapMatMonadic(WrapFloatMonadic(func(b float64) float64 { return math.Y1(b) })), "neg": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return -b })), "-": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return -b })), "+": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return +b })), "conjugate": WrapMatMonadic(WrapCxMonadic(func(b complex128) complex128 { return complex(real(b), -imag(b)) })), "not": WrapMatMonadic(WrapFloatMonadic(func(b float64) float64 { x := float2bool(b) return boolf(!x) })), }
View Source
var Zero = &Num{0.0}
Functions ¶
func Bool2Cx ¶
func Bool2Cx(b bool) complex128
func BoundingBoxString ¶
func Cx2Str ¶
func Cx2Str(c complex128) string
func FillString ¶
func GetVectorOfScalarFloats ¶
func GetVectorOfScalarInts ¶
func ParseCx ¶
func ParseCx(s string) complex128
func RenderBoxString ¶
func RenderPrettyMatrix ¶
Types ¶
type Box ¶
type Box struct {
X interface{}
}
func (Box) GetScalarCx ¶
func (o Box) GetScalarCx() complex128
func (Box) GetScalarFloat ¶
func (Box) GetScalarInt ¶
func (Box) GetScalarOrNil ¶
type Context ¶
type Context struct { Globals map[string]Val Monadics map[string]MonadicFunc Dyadics map[string]DyadicFunc LocalStack []map[string]Val FormatReal string FormatImagPlus string FormatImagMinus string FormatComplexPlus string FormatComplexMinus string StringExtension StringExtensionFunc Extra map[string]interface{} }
func NewContext ¶
func NewContext() *Context
type Dyad ¶
type Dyad struct { Token *Token A Expression Op string B Expression Axis Expression }
type DyadicFunc ¶
func MkEachOpDyadic ¶
func MkEachOpDyadic(name string, fn DyadicFunc) DyadicFunc
func MkInnerProduct ¶
func MkInnerProduct(name string, fn1, fn2 DyadicFunc) DyadicFunc
func MkOuterProduct ¶
func MkOuterProduct(name string, fn DyadicFunc) DyadicFunc
func WrapCxBoolDyadic ¶
func WrapCxBoolDyadic(fn FuncCxCxBool) DyadicFunc
func WrapCxDyadic ¶
func WrapCxDyadic(fn FuncCxCxCx) DyadicFunc
func WrapFloatBoolDyadic ¶
func WrapFloatBoolDyadic(fn FuncFloatFloatBool) DyadicFunc
func WrapFloatDyadic ¶
func WrapFloatDyadic(fn FuncFloatFloatFloat) DyadicFunc
func WrapMatMatDyadic ¶
func WrapMatMatDyadic(fn DyadicFunc) DyadicFunc
type Expression ¶
type FuncCxCxBool ¶
type FuncCxCxBool func(complex128, complex128) bool
type FuncCxCxCx ¶
type FuncCxCxCx func(complex128, complex128) complex128
type FuncFloatFloatBool ¶
type FuncFloatFloatFloat ¶
type IndexedValSlice ¶
func (IndexedValSlice) Len ¶
func (p IndexedValSlice) Len() int
func (IndexedValSlice) Less ¶
func (p IndexedValSlice) Less(i, j int) bool
func (*IndexedValSlice) Swap ¶
func (p *IndexedValSlice) Swap(i, j int)
type Lex ¶
func (*Lex) DoNextToken ¶
type List ¶
type List struct {
Vec []Expression
}
type Mat ¶
func (Mat) GetScalarCx ¶
func (o Mat) GetScalarCx() complex128
func (Mat) GetScalarFloat ¶
func (Mat) GetScalarInt ¶
func (Mat) GetScalarOrNil ¶
func (Mat) PrettyMatrix ¶
type Monad ¶
type Monad struct { Token *Token Op string B Expression Axis Expression }
type MonadicFunc ¶
func MkEachOpMonadic ¶
func MkEachOpMonadic(name string, fn MonadicFunc) MonadicFunc
func MkReduceOrScanOp ¶
func MkReduceOrScanOp(name string, fn DyadicFunc, identity Val, toScan bool) MonadicFunc
func WrapCxMonadic ¶
func WrapCxMonadic(fn funcCxCx) MonadicFunc
func WrapFloatMonadic ¶
func WrapFloatMonadic(fn funcFloatFloat) MonadicFunc
func WrapMatMonadic ¶
func WrapMatMonadic(fn MonadicFunc) MonadicFunc
type Num ¶
type Num struct {
F complex128
}
func CxNum ¶
func CxNum(f complex128) *Num
func (Num) Compare ¶
func (a Char) Compare(x Val) int { b, ok := x.(*Char) if !ok { Log.Panicf("Char::Compare to not-a-Char: %#v", x) } switch { case a.R < b.R: return -1 case a.R == b.R: return 0 case a.R > b.R: return +1 } panic("NOT_REACHED") }
func (Num) GetScalarCx ¶
func (o Num) GetScalarCx() complex128
func (o Char) GetScalarCx() complex128 { Log.Panicf("Char cannot be a Scalar Complex: '%c'", o.R) panic(0) }
func (o Char) GetScalarFloat() float64 { Log.Panicf("Char cannot be a Scalar Float: '%c'", o.R) panic(0) }
func (Num) GetScalarFloat ¶
func (Num) GetScalarInt ¶
func (o Char) GetScalarInt() int { Log.Panicf("Char cannot be a Scalar Int: '%c'", o.R) panic(0) }
func (Num) GetScalarOrNil ¶
func (o Char) GetScalarOrNil() Val { return o }
type Number ¶
type Number struct {
F complex128
}
type Parser ¶
type Parser struct {
Context *Context
}
func (*Parser) ParseSquare ¶
func (p *Parser) ParseSquare(lex *Lex, i int) ([]Expression, int)
type Seq ¶
type Seq struct {
Vec []Expression
}
type StringExtensionFunc ¶
type StringExtensionFunc func(s string) Expression
type Subscript ¶
type Subscript struct { Matrix Expression Vec []Expression }
type Val ¶
type Val interface { Compare(Val) int ValEnum() ValEnum String() string Pretty() string Size() int Shape() []int Ravel() []Val GetScalarInt() int GetScalarFloat() float64 GetScalarCx() complex128 GetScalarOrNil() Val }
func GetVectorOfScalarVals ¶
Source Files ¶
Click to show internal directories.
Click to hide internal directories.