编写一个方案函数class TallBar: UINavigationBar {
override func sizeThatFits(size: CGSize) -> CGSize {
var size = super.sizeThatFits(size)
size.height += 20
return size
}
}
,它将谓词和整数列表作为参数。该函数应该将列表中满足谓词的每个项乘以2并添加结果。例如::
workit
您不能使用(workit even? '(1 2 3 4 5 6)) ==> 4+8+12=24
(workit odd? '(1 2 3 4 5 6)) ==> 2+6+10=18
,map
,remove
或任何其他更高阶的功能。
有人至少可以帮助我抢先一步吗?决定学习我有兴趣申请的工作计划......任何帮助都会很棒!感谢
答案 0 :(得分:1)
首先定义even?
(define (even? x) (= 0 (modulo x 2)))
您可以使用而不是甚至
来定义odd?
(define (odd? x) (not (even? x)))
您的workit
功能非常明显
(define (workit predicate xs)
(define (iter sum xs)
(cond ((empty? xs) sum)
((predicate (first xs)) (iter (+ sum (* 2 (first xs))) (rest xs)))
(else (iter sum (rest xs)))))
(iter 0 xs))
我定义了一个内部iter
函数来逐步查看提供的数字列表xs
,同时跟踪输出sum
。
empty?
,我们就完成了,所以请返回sum
(predicate x)
为真,请将(* 2 x)
添加到sum
并继续迭代我选择使用辅助iter
函数来实现正确的tail recursion。这允许workit
在恒定的空间中运行。
输出
(print (workit even? '(1 2 3 4 5 6))) ;; => 24
(print (workit odd? '(1 2 3 4 5 6))) ;; => 18
答案 1 :(得分:0)
如果列表中没有元素,则列表的工作量是基础 值。
如果第一个元素满足某些条件,那么列表的workit是涉及第一个元素的某些操作的结果,以及列表其余部分的workit。
请注意,每次以递归方式调用workit时(如第二种和第三种情况),列表是上一次调用中列表的其余部分。