예제 #1
0
파일: calc.go 프로젝트: hydra13142/lisp
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
	})
}
예제 #2
0
파일: conv.go 프로젝트: hydra13142/lisp
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
}