谢谢,Common Lisp中的两个求和函数有什么不同

谢谢,Common Lisp中的两个求和函数有什么不同,lisp,common-lisp,elisp,Lisp,Common Lisp,Elisp,两个代码示例都是求和公式的示例: 代码示例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

(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))))
两个代码示例都是求和公式的示例

不,他们没有。第二个函数对数字求和,第一个函数调用以数字为参数的函数并对结果求和。 它将有
f(i)
而不仅仅是
i
在数学符号中的sigma之后。在高阶函数行话中,它是一个项函数。下面是一些使用
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
,这没有意义,因为它的版本只接受一个参数

两个代码示例都是求和公式的示例

不,他们没有。第二个函数对数字求和,第一个函数调用以数字为参数的函数并对结果求和。 它将有
f(i)
而不仅仅是
i
在数学符号中的sigma之后。在高阶函数行话中,它是一个项函数。下面是一些使用
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
,这没有意义,因为它的版本只接受一个参数

这两个函数都不会计算你所说的功能。第二个函数引用了一个未定义的变量
func
。您的缩进是没有希望的,这使得代码非常难以阅读。您没有指定这是哪种语言。我不知道什么是
defund
。如果希望有人回答这个问题,我强烈建议您解决它。
defund
不是Common Lisp中的标准运算符;你能提供一个什么库的引用,或者在你的问题中添加一些关于它的文档吗?你的第二个
defund
似乎没有把
func
作为一个参数,只是
n
。但它引用的是
func
,似乎是在将其传递给自己。这可能是神秘的
defund
的某些特征;在常规的
defun
下,这是错误的:函数
sigma
只能用一个参数调用。这两个函数都不能计算您所说的它们所做的事情。第二个函数引用了一个未定义的变量
func
。您的缩进是没有希望的,这使得代码非常难以阅读。您没有指定这是哪种语言。我不知道什么是
defund
。如果希望有人回答这个问题,我强烈建议您解决它。
defund
不是Common Lisp中的标准运算符;你能提供一个什么库的引用,或者在你的问题中添加一些关于它的文档吗?你的第二个
defund
似乎没有把
func
作为一个参数,只是
n
。但它引用的是
func
,似乎是在将其传递给自己。这可能是神秘的
defund
的某些特征;在常规的
defun
下,这是错误的:函数
sigma
只能用一个参数调用。