golang : eval (数式の evaluation)を行う
go/token パッケージ、go/types パッケージ、go/constant パッケージを使用します。
import ( "fmt" "go/token" "go/types" "go/constant" ) fs := token.NewFileSet() tv, err := types.Eval(fs, nil, token.NoPos, "1 + 2 * 3 % 4") if err != nil { fmt.Println(err) return } val, ok := constant.Int64Val(tv.Value) if !ok { fmt.Println("Failed to get Int64Val") return } fmt.Println(val) // 結果は 3。
(Go 言語で プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問 をトライ中に 2問目を解くために方法を探しただけで、中身はあまりよくわかっていません。)