From e9ef34f4e5bbf2cccd339370e87b79cd8db4e16b Mon Sep 17 00:00:00 2001 From: Martin Schmollinger <martin.schmollinger@reutlingen-university.de> Date: Fri, 7 Apr 2023 18:30:48 +0200 Subject: [PATCH] Solution to exercise of unit 03-02 --- exercise_0302/go.mod | 3 +++ exercise_0302/main.go | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 exercise_0302/go.mod create mode 100644 exercise_0302/main.go diff --git a/exercise_0302/go.mod b/exercise_0302/go.mod new file mode 100644 index 0000000..4444524 --- /dev/null +++ b/exercise_0302/go.mod @@ -0,0 +1,3 @@ +module gitlab.reutlingen-university.de/go-exercises/go-starter/exercise_0302 + +go 1.20 diff --git a/exercise_0302/main.go b/exercise_0302/main.go new file mode 100644 index 0000000..58762e0 --- /dev/null +++ b/exercise_0302/main.go @@ -0,0 +1,35 @@ +package main + +import "fmt" + +type calcFunc func(a, b int) int + +func compute(calc calcFunc, init int, a ...int) (result int) { + result = init + for _, n := range a { + result = calc(result, n) + } + return +} + +func selectCalcFunc(calcOp rune) calcFunc { + return func(a, b int) int { + switch calcOp { + case '+': + return a + b + case '*': + return a * b + case '-': + return a - b + default: + panic("Illegal operation") + } + } +} + +func main() { + fmt.Println(compute(selectCalcFunc('+'), 0, 1, 2, 3)) + fmt.Println(compute(selectCalcFunc('-'), 0, 1, 2, 3)) + fmt.Println(compute(selectCalcFunc('*'), 1, 1, 2, 3)) + fmt.Println(compute(selectCalcFunc('?'), 1, 1, 2, 3)) +} -- GitLab