谢谢,Common Lisp中的两个求和函数有什么不同
两个代码示例都是求和公式的示例: 代码示例1谢谢,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)))) 两个代码示例都是求和公式的
(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
只能用一个参数调用。