Они очень разные, хотя в некоторых случаях они могут быть эквивалентными.
(apply func '(1 2 3))
эквивалентно
(func 1 2 3)
(foldr func 0 '(1 2 3))
эквивалентнона
(func (func (func 3 0) 2) 1)
В случаях, когда функция является ассоциативной и коммутативной, и она позволяет предоставить переменное число аргументов, результаты будут одинаковыми. Например,
(apply + '(1 2 3)) == (foldr + 0 '(1 2 3))
Но foldr
можно использовать для объединения результатов функций, которые принимают только два аргумента, или использовать более гибкие способы объединения результатов.
Для получения дополнительной информации оfoldr
, см. Карта, Фильтр, Foldr в DrRacket / Схема