本文整理汇总了Golang中github.com/verdverm/go-symexpr.Expr.AmIAlmostSame方法的典型用法代码示例。如果您正苦于以下问题:Golang Expr.AmIAlmostSame方法的具体用法?Golang Expr.AmIAlmostSame怎么用?Golang Expr.AmIAlmostSame使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/verdverm/go-symexpr.Expr
的用法示例。
在下文中一共展示了Expr.AmIAlmostSame方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: AddTermToExprMethod1
// add another term to an add expr
func (PS *PgeSearch) AddTermToExprMethod1(O, E expr.Expr, pos int) (ret []expr.Expr) {
ret = make([]expr.Expr, 0)
A := E.(*expr.Add)
// f() + cL
for _, L := range PS.GenLeafs {
c := new(expr.Constant)
c.P = -1
l := L.Clone()
// mul it
M := expr.NewMul()
M.Insert(c)
M.Insert(l)
// skip if the same term already exists in the add
skip := false
for _, e := range A.CS {
if e == nil {
continue
}
// fmt.Printf("ACMP %v %v\n", M, e)
if e.AmIAlmostSame(M) || M.AmIAlmostSame(e) {
skip = true
break
}
}
if skip {
continue
}
C := O.Clone()
P := pos
AM := C.GetExpr(&P).(*expr.Add)
AM.Insert(M)
sort.Sort(AM)
C.CalcExprStats()
good := PS.cnfg.treecfg.CheckExpr(C)
if good {
ret = append(ret, C)
}
}
// f() + c*node(L)
for _, N := range PS.GenNodes {
for _, L := range PS.GenLeafs {
c := new(expr.Constant)
c.P = -1
l := L.Clone()
n := N.Clone()
p := 1
n.SetExpr(&p, l)
var E expr.Expr
if N.ExprType() == expr.DIV {
E = expr.NewDiv(c, l)
} else {
// mul it
M := expr.NewMul()
M.Insert(c)
M.Insert(n)
E = M
}
// skip if the same term already exists in the add
skip := false
for _, e := range A.CS {
if e == nil {
continue
}
// fmt.Printf("ACMP %v %v\n", M, e)
if e.AmIAlmostSame(E) || E.AmIAlmostSame(e) {
skip = true
break
}
}
if skip {
continue
}
// fmt.Println(E.String())
C := O.Clone()
P := pos
AM := C.GetExpr(&P).(*expr.Add)
AM.Insert(E)
sort.Sort(AM)
C.CalcExprStats()
good := PS.cnfg.treecfg.CheckExpr(C)
if good {
ret = append(ret, C)
}
}
}
return ret
}