我完全坚持写一个不使用递归,本地或lambda的函数的问题。只能使用抽象列表函数。该函数必须输入正整数列表,并输出这些整数中有多少严格大于1.即,所有整数列表的长度> 1
关于如何做到这一点的任何想法?我从未实现过自己的抽象列表功能,而且我不确定在这种情况下会使用哪些功能。
此外,语言设置为中级学生,不高。这就是lambda和其他功能无法使用的原因。
答案 0 :(得分:1)
鉴于语言限制,我们可以使用foldl
:
(define lst '(-4 -3 -2 -1 0 1 2 3 4 5))
(define (adder e acc)
(if (> e 1) (add1 acc) acc))
(foldl adder 0 lst)
=> 4
如果不是限制,那么在Racket中有一种更简单的方法:
(count (lambda (x) (> x 1)) lst)
=> 4
在这种情况下,使用的抽象列表函数是count
,请参阅文档以获取更多可用函数。
答案 1 :(得分:1)
这是否适合您的限制?从每个数字中减去一个,过滤正数,并获取结果列表的长度:
(define (f lst)
(length (filter positive? (map sub1 lst))))
> (f '(1 2 3 4 5 0 -1 -2 -3 -4))
4
在中级学生中工作正常。