Мне нужно написать функцию в Racket с помощью foldr, которая возьмет список чисел и удалит элементы списка, которые больше любых последующих чисел ,Как использовать foldr в Racket для исключения чисел в списке, который больше, чем любые последующие номера
Пример: (исключить-больше (список 1 2 3 4 5)) следует произвести (1 2 3 4)
я могу сделать это без использования foldr или функции любого более высокого порядка, но я не могу понять это с foldr. Вот что у меня есть:
(define (eliminate-larger lst)
(filter (lambda (z) (not(equal? z null)))
(foldr (lambda (x y)
(cons (determine-larger x (rest lst)) y)) null lst))
)
(define (determine-larger value lst)
(if (equal? (filter (lambda (x) (>= x value)) lst) lst)
value
null)
)
определить, больше будет принимать значения и список, и вернуть это значение, если оно больше или равно все элементы в списке. Если нет, он возвращает null. Теперь функция «исключающая больший» пытается пройти через список и передать каждое значение для определения большего, а также список каждого числа после него. Если это «хорошее» значение, оно будет возвращено и помещено в список, если в список не входит нуль. Затем в конце нули отфильтровываются. Моя проблема заключается в получении списка чисел, которые следуют за текущим числом в функции foldr. Использование «rest lst» не работает, так как оно не выполняется рекурсивно. Как получить оставшиеся числа после x в foldr?
Это работает, спасибо! Я пытаюсь прочитать о том, как работает andmap, но я не совсем понимаю, что он делает. –
'andmap' используется для проверки того, что' member' является '<=' каждым элементом в списке аккумуляторов. По сравнению с использованием функции, подобной 'filter', у нее есть дополнительное преимущество для возврата раньше, если _any_ приложение предоставленного proc возвращает' # f' (например, '(<= 5 4)'). – pdoherty926
@KeithCalderwood Если вы удовлетворены этим ответом, не могли бы вы принять его? – pdoherty926