带列表的基本功能

时间:2011-01-25 05:35:09

标签: list functional-programming scheme

我们有一个list A (1 2 3 4 5 2 2 3 3 3 4 6 7),我们希望得到这些数字,其中会议数量是<然后他们。

numbers | meets
      1 = 1
      2 < 3
      3 < 4
      5 > 1
      4 > 2
      6 > 1
      7 > 1

Example:
Input:
list (1 1 2 3 2 3 4 4 5 5 5 5 5 5)
Output:
(1 3 4)

1 个答案:

答案 0 :(得分:1)

我的解决方案,我关注@lbruder评论,但我不清楚为什么1出现在你的输出中,因为如果你检查的是较小且等于2也应该出现

> (define (occurences lst)
    (cond ((null? lst) empty)
          ((< (length (filter (lambda (x) (if (= x (car lst)) x #f)) lst)) (car lst)) (cons (car lst) (occurences (filter (lambda (x) (if (not (= x (car lst))) x #f)) lst))))
          (else (occurences (filter (lambda (x) (if (not (= x (car lst))) x #f)) lst)))))
> (occurences '(1 2 3 2 3 4 4 5 5 5 5 5 5))
(3 4)
  • 第1次出现1 - >假1!&lt; 1
  • 第2次出现2 - >假2!&lt; 2
  • 第3次出现2 - &gt;真2&lt; 3
  • 第4次出现2 - &gt;真2&lt; 4
  • 第5次出现6 - >假6!&lt; 5

因此(3 4)

!<,我的意思是不小(大于或等于)