【问题标题】:Abstract List Functions in Racket/SchemeRacket/Scheme 中的抽象列表函数
【发布时间】:2015-01-08 05:59:32
【问题描述】:

我完全陷入了编写一个不使用递归、局部变量或 lambda 的函数的问题上。只能使用抽象列表函数。该函数必须输入一个正整数列表,并输出其中有多少个整数严格大于1。即所有整数列表的长度> 1

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

另外,语言设置是中级学生,没有更高。这就是为什么不能使用 lambda 和其他函数的原因。

【问题讨论】:

    标签: list function scheme racket


    【解决方案1】:

    这符合您的限制吗?从每个数字中减去一个,过滤正数,然后取结果列表的长度:

    (define (f lst)
      (length (filter positive? (map sub1 lst))))
    
    > (f '(1 2 3 4 5 0 -1 -2 -3 -4))
    4
    

    在中级学生中工作正常。

    【讨论】:

    • 是的,这正是我想要的!太感谢了。这是一个非常好的方法
    【解决方案2】:

    鉴于语言限制,我们可以使用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,请参阅文档了解更多可用函数。

    【讨论】:

    • 不确定这是否适用于所选语言,是吗?
    • @leppie 你说得对,我忘了那部分。现在已经修复了:)
    猜你喜欢
    • 2015-01-13
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 2020-07-17
    • 2011-07-10
    • 1970-01-01
    • 2013-06-19
    相关资源
    最近更新 更多