Racket / Scheme中的抽象列表函数

时间:2014-11-11 16:02:13

标签: list function scheme racket

我完全坚持写一个不使用递归,本地或lambda的函数的问题。只能使用抽象列表函数。该函数必须输入正整数列表,并输出这些整数中有多少严格大于1.即,所有整数列表的长度> 1

关于如何做到这一点的任何想法?我从未实现过自己的抽象列表功能,而且我不确定在这种情况下会使用哪些功能。

此外,语言设置为中级学生,不高。这就是lambda和其他功能无法使用的原因。

2 个答案:

答案 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

在中级学生中工作正常。