func init() { express.Add(func(s []byte) (interface{}, int) { switch s[0] { case '+', '-', '*', '/', '(', ')': return s[0], 1 } return nil, 0 }) express.Add(func(s []byte) (interface{}, int) { a, i := parser.ParseFloat(s) return a, i }) }
func Float(t []lisp.Token, p *lisp.Lisp) (lisp.Token, error) { if len(t) != 1 { return lisp.None, lisp.ErrParaNum } u, err := p.Exec(t[0]) if err != nil { return lisp.None, err } switch u.Kind { case lisp.Int: return lisp.Token{lisp.Float, float64(u.Text.(int64))}, nil case lisp.Float: return u, nil case lisp.String: a, b := parser.ParseFloat([]byte(u.Text.(string))) if b == 0 { return lisp.None, lisp.ErrNotConv } return lisp.Token{lisp.Float, a}, nil } return lisp.None, lisp.ErrFitType }