如何计算列表中某个元素的出现并生成一个新列表?

时间:2019-04-02 23:12:12

标签: scheme racket

我该如何改变 (count-fruit ’(apple banana banana orange peach))'((apple 1) (banana 2) (orange 1) (grape 0) (peach 1))) 请注意,葡萄也是一种存在的水果,因此我们无法从列表中将其消除

1 个答案:

答案 0 :(得分:-1)

首先考虑

(map (lambda (x) (cons x 0)) '(apple banana banana orange peach))

这会产生

((apple . 0) (banana . 0) (banana . 0) (orange . 0) (peach . 0))

接下来,您可以使用计数器来增加数字。

(let ((counter 0))
  (lambda (x)
    ;; you need to store the result (cons x counter)
    ;; in a temporary variable using LET here
    ;; then use SET! to increment counter
    ;; then return the temp
    ))

我刚刚提供了一个模板来帮助您入门,如果您在完成过程中遇到困难,请随时提出后续问题。希望这些想法很明确。