Цель состоит в том, чтобы написать функцию фильтра только с одним вызовом foldr без рекурсии или любых других процедур более высокого порядка (map, andmap, apply и т. Д.).пишущий фильтр с помощью одного вызова foldr?
В настоящее время я использую
(define (filter ps xs)
(if (empty? xs)
ps
(foldr (lambda (p y)
(if (andmap p xs)
(cons p y)
y))
'()
ps)))
однако он использует andmap
функцию, которая рассматривается процедура высшего порядка
Цель должна иметь
(filter positive? '(-1 2 3 4 -5 -6))
=> '(2 3 4)
с одним вызовом foldr
Как бы реализовать его таким образом, если ps - это список, состоящий из процедур, так что возвращенный список сохраняет только элемент, который является истинным для всех процедур? Я могу использовать только один вызов foldr. – Chase
Это сложнее, вам нужно будет пройти список процедур в состоянии 'if'. Замените '(ps s)' на '(andmap (lambda (f) (fp)) ps)' –
Ну да, это будет проблемой, я могу использовать только один вызов foldr и ничего другого (не могу использовать andmap и никакой рекурсии), иначе это было бы намного менее запутанным. – Chase