В чем разница между двумя функциями суммирования в Common Lisp, спасибо - PullRequest
0 голосов
/ 27 октября 2018

Оба примера кода приведены для формулы суммирования: Code examples are for the summation formula

Пример кода 1

(defund sigma (func n)
        (cond ((= n 1)(funcall func 1)
        (t (+ (sigma func(1- n))
           (funcal func n))))))

Пример кода 2

(defund sigma(n)
        (cond ((= n 1)1)
        (t (+ n(sigma func(1- n))))

1 Ответ

0 голосов
/ 27 октября 2018

Оба примера кода приведены для формулы суммирования

Нет, они этого не делают.В то время как вторая суммирует числа, первая вызывает функцию с номером в качестве аргумента и суммирует результат.Он будет иметь f(i) вместо i после сигмы в математической записи.В высшем порядке функция lingo это термин функция.Вот несколько примеров, использующих 10:

(sigma (lambda (v) 1) 10) ; ==> 10 in CL I'd use (sigma (constantly 1) 10)
(sigma #'1+ 10)           ; ==> 65
(sigma #'identity 10)     ; ==> 55

Во втором случае будет получен только третий пример:

(sigma 10) ; ==> 55

PS: в ваших функциях есть синтаксические ошибки и опечатки, которые я только что проигнорировал.Вам нужно будет это исправить, прежде чем это сработает.Самым сложным, возможно, является отсутствие завершающей круглой скобки в первом термине cond, из-за которого cond имеет только один термин, а вторая функция также передает func, что не имеет смысла, поскольку его версия принимает только один аргумент.

...