首页 > 解决方案 > 使用 map 或 reduce 或 filter,在 Scheme 中,计算列表中有多少个元素

问题描述

(number-length '(1 1 0 1 0 0)) 这假设返回 6。我知道如何使用长度并找到它,但我不知道如何在没有长度的情况下使用 map、filter 或 reduce。有人可以给出一些想法吗?

标签: schemeracket

解决方案


映射和应用:

(define (number-length1 lst)
  (apply + (map (lambda (n) 1) lst)))

折叠/减少:

(define (number-length2 lst)
  (foldl (lambda (list-element n) (+ n 1))
         0
         lst))

映射和折叠/减少:

(define (number-length3 lst)
  (foldl + 0 (map (lambda (n) 1) lst)))

推荐阅读