Вернемся снова с еще одним вопросом Racket. Я новичок в функциях высшего порядка в целом, так что дайте мне немного свободы.
В настоящее время пытаюсь найти переменную сумму, используя функции foldr / foldl, а не рекурсию.
например (altsum '(1 3 5 7)) должно равняться 1 - 3 + 5 - 7, что в сумме составляет -4.
Я подумал о нескольких возможных способах решения этой проблемы:
- Получите числа для сложения в один список и числа для вычитания в другом списке и сложите их вместе.
- Каким-то образом используйте длину списка, чтобы определить, прибавлять или вычитать.
- Может быть, сгенерируйте какую-то маску '(1 -1 1 -1), умножьте соответственно, затем сложите и сложите все.
Однако я понятия не имею, с чего начать с foldl / foldr, когда все операции не одинаковы для каждого элемента в списке, поэтому у меня возникают проблемы с реализацией какой-либо из моих идей. Кроме того, всякий раз, когда я пытаюсь добавить более двух переменных в свой анонимный класс foldl, я понятия не имею, какие переменные впоследствии относятся к каким переменным в анонимном классе.
Приветствуется любая помощь или указатели.