// IntParser 解析整数 func IntParser(st p.State) (interface{}, error) { i, err := p.Int(st) if err == nil { val, err := strconv.Atoi(i.(string)) if err == nil { return Int(val), nil } return nil, err } return nil, err }
"digit": ParsecBox(p.Digit), "int": func(env Env, args ...interface{}) (Lisp, error) { if len(args) != 1 { return nil, fmt.Errorf("int Arg Error:expect args has 1 arg") } param, err := Eval(env, args[0]) if err != nil { return nil, err } var i Int var ok bool if i, ok = param.(Int); !ok { return nil, fmt.Errorf("int Arg Error:expect 1 string arg") } return ParsecBox(func(st p.State) (interface{}, error) { data, err := p.Int(st) if err != nil { return nil, st.Trap("gisp parsex error:expect a int but error: %v", err) } if Int(data.(int)) != i { return nil, st.Trap("gisp parsex error:expect a Int but %v", data) } return data, nil }), nil }, "float": func(env Env, args ...interface{}) (Lisp, error) { if len(args) != 1 { return nil, fmt.Errorf("float Arg Error:expect args has 1 arg") } param, err := Eval(env, args[0]) if err != nil {