func Equals(frame wdte.Frame, args ...wdte.Func) wdte.Func {
	if len(args) <= 1 {
		return wdteutil.SaveArgsReverse(wdte.GoFunc(Equals), args...)
	}
	a1 := args[0]
	if _, ok := a1.(error); ok {
		return a1
	}
	a2 := args[1]
	if _, ok := a2.(error); ok {
		return a2
	}
	if cmp, ok := a1.(wdte.Comparer); ok {
		c, _ := cmp.Compare(a2)
		return wdte.Bool(c == 0)
	}
	if cmp, ok := a2.(wdte.Comparer); ok {
		c, _ := cmp.Compare(a1)
		return wdte.Bool(c == 0)
	}
	return wdte.Bool(a1 == a2)
}
Equals is a WDTE function with the following signatures:

== a b
(== b) a

Returns true if a equals b. If a implements wdte.Comparer, the
equality check is done using that implementation. If a does not but
b does, b's implementation is used. If neither does, a direct Go
equality check is used.
package std
import (
	"fmt"
	"math"
	"github.com/DeedleFake/wdte"
	"github.com/DeedleFake/wdte/wdteutil"
)
func Plus(frame wdte.Frame, args ...wdte.Func) wdte.Func {
	if len(args) <= 1 {
		return wdteutil.SaveArgsReverse(wdte.GoFunc(Plus), args...)
	}
	frame = frame.Sub("+")
	var sum wdte.Number
	for _, arg := range args {
		if _, ok := arg.(error); ok {
			return arg
		}
		sum += arg.(wdte.Number)
	}
	return sum
}
func Minus(frame wdte.Frame, args ...wdte.Func) wdte.Func {
	if len(args) <= 1 {
		return wdteutil.SaveArgsReverse(wdte.GoFunc(Minus), args...)
	}
	frame = frame.Sub("-")
	a1 := args[0]
	if _, ok := a1.(error); ok {
		return a1
	}
	a2 := args[1]
	if _, ok := a2.(error); ok {
		return a2
	}
	return a1.(wdte.Number) - a2.(wdte.Number)
}
func Times(frame wdte.Frame, args ...wdte.Func) wdte.Func {
	if len(args) <= 1 {
		return wdteutil.SaveArgsReverse(wdte.GoFunc(Times), args...)
	}
	frame = frame.Sub("*")
	p := wdte.Number(1)
	for _, arg := range args {
		if _, ok := arg.(error); ok {
			return arg
		}
		p *= arg.(wdte.Number)
	}
	return p
}
func Div(frame wdte.Frame, args ...wdte.Func) wdte.Func {
	if len(args) <= 1 {
		return wdteutil.SaveArgsReverse(wdte.GoFunc(Div), args...)
	}
	frame = frame.Sub("/")
	a1 := args[0]
	if _, ok := a1.(error); ok {
		return a1
	}
	a2 := args[1]
	if _, ok := a2.(error); ok {
		return a2
	}
	return a1.(wdte.Number) / a2.(wdte.Number)
}
func Mod(frame wdte.Frame, args ...wdte.Func) wdte.Func {
	if len(args) <= 1 {
		return wdteutil.SaveArgsReverse(wdte.GoFunc(Mod), args...)
	}
	frame = frame.Sub("%")
	a1 := args[0]
	if _, ok := a1.(error); ok {
		return a1
	}
	a2 := args[1]
	if _, ok := a2.(error); ok {
		return a2
	}
	return wdte.Number(math.Mod(
		float64(a1.(wdte.Number)),
		float64(a2.(wdte.Number)),
	))
}