You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
1.1 KiB
Go

package fp
// Fold applies a function to each element in the slice and accumulates the result.
// It takes a slice of type T, an initial value of type A, and a function that combines the accumulator value with each element of the slice.
// The function returns the final accumulated value.
func Fold[A any, T any](s []T, a A, f func(A, T) A) A {
for i := range s {
a = f(a, s[i])
}
return a
}
// Map applies the function f to each element of the slice s and returns a new slice
// containing the results.
//
// The returned slice will contain elements of type M, which is the result
// type of the function f.
//
// Example usage:
//
// numbers := []int{1, 2, 3, 4, 5}
// doubled := Map(numbers, func(n int) int {
// return n * 2
// })
// // doubled is now []int{2, 4, 6, 8, 10}
//
// names := []string{"Alice", "Bob", "Charlie"}
// lengths := Map(names, func(name string) int {
// return len(name)
// })
// // lengths is now []int{5, 3, 7}
//
// Note: The input slice s is not modified by this function.
func Map[T, M any](s []T, f func(T) M) []M {
res := []M{}
for i := range s {
res = append(res, f(s[i]))
}
return res
}