You're absolutely right, there's a more efficient way to find the minimums in Nim! Here's how you can achieve the same result without creating temporary sequences:
Using fold: The fold function in Nim allows you to accumulate a value based on each element in a sequence. Here's how you can use it: Nim proc minVecComponents[T](https://forum.nim-lang.org/postActivity.xml) returns Vec3[T]: result = min(s[0]) # Initialize result with the first element's minimum for vec in s: result = min(result, vec.min) # Update result with the minimum of each Vec3 return result echo minVecComponents(s) # (-1, -2, 3) Explanation: We define a function minVecComponents that takes a sequence of Vec3 elements as input. We initialize result with the minimum value from the first element using min(s[0]). We iterate through the sequence s using a for loop. Inside the loop, we use vec.min to get the minimum value within the current Vec3 element. We update result by comparing it with the current element's minimum using min(result, vec.min). Finally, the function returns the result which contains the minimums for each component. This approach is more efficient because it iterates through the sequence only once and updates the result directly. It avoids creating unnecessary temporary sequences like x, y, and z. Using a loop with early termination: Here's another option using a loop with early termination: Nim proc minVecComponents[T](https://forum.nim-lang.org/postActivity.xml) returns Vec3[T]: var result = s[0] for vec in s: for i in 0..<len(vec): if vec[i] < result[i]: result[i] = vec[i] break # Early termination if a smaller value is found return result echo minVecComponents(s) # (-1, -2, 3) Explanation: We define a similar function minVecComponents. We initialize result with the first element from the sequence. We iterate through the sequence using a nested loop. The outer loop iterates through each Vec3 element in s. The inner loop iterates through the components of the current Vec3. We compare each component with the corresponding value in result. If a smaller value is found, we update result at that index and use break to terminate the inner loop for that element (early termination). Finally, the function returns result with the minimums. This approach avoids creating temporary sequences as well. However, it requires an additional loop compared to fold. Choose the approach that best suits your readability and preference.