如何定义数字和字母的列表,但只列出该列表中的奇数?!
(oddsum '(3 6 c 5 82 29 e g) ) => 37
答案 0 :(得分:4)
循环:
(loop for ... in ...
when ...
sum ...)
使用高阶函数:
(reduce #'+ (remove-if-not (lambda (e) ...) ...))
单个缩减也可以起作用。
答案 1 :(得分:1)
如果你是一个绝对的初学者,也许你还没有研究过很多特殊形式,但我认为你可以知道$http({
method: 'GET',
url: '/someUrl'
}).then(function successCallback(response) {
$scope.instructions = response;
}, function errorCallback(response) {
});
一个,其语法为{{ 1}} ...当然你必须知道if
!
使用(if COND THEN ELSE)
和defun
,我们从定义递归函数defun
开始,该函数对数字列表求和,即{ {1}}:if
递归实现意味着我们想要(使用mysum
)列表的第一个元素lon
与列表的剩余部分(defun mysum (lon) ...)
的总和相加: +
- 如果有第一个元素,当然......所以我们检查列表是否为空,(car lon)
,然后是我们已经讨论过的(mysum (cadr lon))
子句,最后(+ (car lon) (mysum (cadr lon)))
子句,其值必须是空列表中值的总和,即(if lon ...
,以便THEN
- > ELSE
。
0
所以,我们已经定义了一个非常简单的函数,因为它运行的列表是同构的,对于非齐次函数,抛出额外的奇怪性,我们必须更加小心并且总和为剩余部分的总和{ {1}}如果(+ last-value (mysum empty-list))
不是奇数,或last-value
,如果它是奇数,
(defun mysum (lon)
(if lon
(+ (car lon) (mysum (cdr lon)))
0))
答案 2 :(得分:0)
绝对最简单的可能只是使用reduce
和辅助函数:
(defun sum-only-odd-numbers (a b)
(+ a ;; Previous version checked for oddness here, that is incorrect
(if (and (integerp b) (oddp b)) b 0))
(reduce #'sum-only-odd-numbers ... :initial-value 0)