让我知道代码中的错误并进行编辑

时间:2011-02-23 13:58:22

标签: scheme

定义一个名为symcount的函数,它接受符号和列表,并返回符号出现在列表中的次数。如果列表包含子列表,则无论嵌套的深度如何,都应计算所有出现次数。

(define syscount(lambda (n x)
  (if (empty? x)
    0
  (if (equal? n (car x))
    (+ 1 syscount(n (cdr x))))))) 

这是我写的,帮助我

3 个答案:

答案 0 :(得分:1)

类似的东西:

(define (my-flatten xs)
  (foldr
   (lambda(x acc)
     (if (list? x)
         (append (my-flatten x) acc)
         (cons x acc)))
   (list)
   xs))

(define (my-filter pred xs)
  (let recur ((xs xs)
              (acc (list)))
    (if (empty? xs)
        (reverse acc)
        (if (pred (car xs))
            (recur (cdr xs) (cons (car xs) acc))
            (recur (cdr xs) acc)))))

(define (count-occur s ls)
  (let ((flatten-ls (my-flatten ls)))
    (foldl (lambda (e acc) (if (eq? s e)
                               (+ acc 1)
                               acc))
           0
           flatten-ls)))

测试:

> (count-occur 'foo (list 1 'foo (list 2 'foo 3 'bar) 4 (list 5 (list 6 'foo)) 7 'foo 8))
4

答案 1 :(得分:1)

(define (syscount n x) 
            (if (null? x) 0 
                  (if (list? (car x))  (+ (syscount n (car x)) (syscount n (cdr x))) 
                         (+ (syscount n (cdr x)) (if (equal? n (car x)) 1 0))))) 

输出

  

(syscount'1'(1 2 3))
      1
   (syscount'1'(1(1 2)3))
      2
  (syscount'1'(1(1 2)1(1)3))
      4

答案 2 :(得分:0)

(define (symcount n x)
  (cond((null? x) 0)
       ((list? (car x))(symcount n (car x)))
       ((eq? n (car x))(+ 1 (symcount n (cdr x))))
       (else(symcount n (cdr x)))))