Сумма чисел в списке с использованием схемы - PullRequest
3 голосов
/ 13 октября 2011

Я хочу суммировать числа в списке без использования рекурсии.Я знаю, что вы можете сложить список чисел, как это

(+ num1 num2 ... numN)

, но что если у вас есть список L, который равен(num1 num2 ... numN) есть ли способ заставить + принимать числа в этом списке в качестве аргументов.Мне нужно сделать это без рекурсии или вспомогательных функций.

Ответы [ 2 ]

11 голосов
/ 13 октября 2011

Конечно, просто используйте apply:

(apply + '(1 2 3 4 5 6))   ; same as (+ 1 2 3 4 5 6)
(apply + 1 2 3 '(4 5 6))   ; ditto
(apply + 1 2 3 4 5 '(6))   ; ditto
(apply + 1 2 3 4 5 6 '())  ; ditto
3 голосов
/ 13 октября 2011

Общий ответ на вопрос, который вы, похоже, задаете - как взять список и использовать его в качестве аргументов, - apply, как ответил Крис Джестер-Янг.этот конкретный вопрос, могут быть некоторые другие соображения.Вы можете суммировать списки произвольного размера.Однако реализации часто имеют ограничение на количество аргументов, с которыми вы можете вызывать функцию.Более надежное решение может заключаться в использовании некоторой функции fold (различные реализации имеют разные функции сгиба) для свертывания + по списку.

...