查找一个 s 表达式在另一个 s 表达式中出现的频率

Finding the frequency that one s-expression appears in another

我正在做一个小的个人项目来自学球拍。我目前正在创建一个接受两个 s 表达式的函数,returns 是第一个表达式在第二个表达式中出现的次数。

如果我输入类似 1 和 '(1 2 3 1 2 3) 和 returns 2 的内容,该程序将按预期运行,但不适用于 '(1 2)((1 2) 1 2 (1) (2) (1 2)),这应该return 2.

这是我目前的代码

(define (count item lst)
  (cond ((null? lst) 0)
        ((= item (car lst)) (+ 1 (count item (cdr lst))))
        (else (count item (cdr lst)))))

试试这个:

(define (count item lst)
  (cond ((null? lst) 0)
        ((equal? item (car lst)) (+ 1 (count item (cdr lst))))
        (else (count item (cdr lst)))))

请记住,= 用于比较 个数字 。要进行更一般的相等比较,请使用 equal?。现在它按预期工作:

(count '(1 2) '((1 2) 1 2 (1) (2) (1 2)))
=> 2