дайте мне знать об ошибке в коде и отредактируйте ее - PullRequest
0 голосов
/ 23 февраля 2011

Определите функцию с именем symcount, которая принимает символ и список и возвращает число раз, когда символ встречается в списке. Если список содержит подсписки, все вхождения должны учитываться независимо от того, насколько глубоко они вложены.

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

это то, что я написал, помогите мне, пожалуйста

Ответы [ 3 ]

1 голос
/ 23 февраля 2011
(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))))) 

Выход

(системный счет '1' (1 2 3))
1
(системный счет '1' (1 (1 2) 3))
2
(системный счет '1' (1 (1 2) 1 (1) 3))
4

1 голос
/ 23 февраля 2011

Что-то вроде:

(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
0 голосов
/ 20 сентября 2013
(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)))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...