Commit 966a2c0 dengsgo
committed
1 parent 4eb1def commit 966a2c0 Copy full SHA for 966a2c0
File tree 2 files changed +31
-10
lines changed
2 files changed +31
-10
lines changed Original file line number Diff line number Diff line change @@ -41,8 +41,8 @@ func init() {
41
41
42
42
"noerr" : {1 , defNoerr },
43
43
44
- "max" : {2 , defMax },
45
- "min" : {2 , defMin },
44
+ "max" : {- 1 , defMax },
45
+ "min" : {- 1 , defMin },
46
46
}
47
47
}
48
48
@@ -107,18 +107,40 @@ func defCbrt(expr ...ExprAST) float64 {
107
107
return math .Cbrt (ExprASTResult (expr [0 ]))
108
108
}
109
109
110
+ // max(2) = 2
110
111
// max(2, 3) = 3
112
+ // max(2, 3, 1) = 3
111
113
func defMax (expr ... ExprAST ) float64 {
112
- return math .Max (p2 (expr ... ))
114
+ if len (expr ) == 0 {
115
+ panic ("calling function `max` must have at least one parameter." )
116
+ }
117
+ if len (expr ) == 1 {
118
+ return ExprASTResult (expr [0 ])
119
+ }
120
+ maxV := ExprASTResult (expr [0 ])
121
+ for i := 1 ; i < len (expr ); i ++ {
122
+ v := ExprASTResult (expr [i ])
123
+ maxV = math .Max (maxV , v )
124
+ }
125
+ return maxV
113
126
}
114
127
115
- // max(2, 3) = 2
128
+ // min(2) = 2
129
+ // min(2, 3) = 2
130
+ // min(2, 3, 1) = 1
116
131
func defMin (expr ... ExprAST ) float64 {
117
- return math .Min (p2 (expr ... ))
118
- }
119
-
120
- func p2 (expr ... ExprAST ) (float64 , float64 ) {
121
- return ExprASTResult (expr [0 ]), ExprASTResult (expr [1 ])
132
+ if len (expr ) == 0 {
133
+ panic ("calling function `min` must have at least one parameter." )
134
+ }
135
+ if len (expr ) == 1 {
136
+ return ExprASTResult (expr [0 ])
137
+ }
138
+ maxV := ExprASTResult (expr [0 ])
139
+ for i := 1 ; i < len (expr ); i ++ {
140
+ v := ExprASTResult (expr [i ])
141
+ maxV = math .Min (maxV , v )
142
+ }
143
+ return maxV
122
144
}
123
145
124
146
// noerr(1/0) = 0
Original file line number Diff line number Diff line change @@ -160,7 +160,6 @@ func TestParseAndExecError(t *testing.T) {
160
160
"sin(1, 50)" ,
161
161
"max(1,)" ,
162
162
"min(1,)" ,
163
- "min(1,3, 099)" ,
164
163
"1/0" ,
165
164
"99.9 / (2-1-1)" ,
166
165
"(1+2)3" ,
You can’t perform that action at this time.
0 commit comments