RosettaCodeData/Task/Man-or-boy-test/Go/man-or-boy-test-3.go
2023-07-01 13:44:08 -04:00

34 lines
449 B
Go

package main
import "fmt"
func eval(v interface{}) int {
switch v := v.(type) {
case int:
return v
case func() int:
return v()
}
panic("bad type")
return 0
}
func A(k int, x1, x2, x3, x4, x5 interface{}) (a int) {
var B func() int
B = func() (b int) {
k--
a = A(k, B, x1, x2, x3, x4)
b = a
return
}
if k <= 0 {
a = eval(x4) + eval(x5)
} else {
_ = B()
}
return
}
func main() {
fmt.Println(A(10, 1, -1, -1, 1, 0))
}