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

时间:2015-11-17 02:06:58

标签: scheme racket counter frequency

我正在开展一个小型的个人项目来自学Racket。我目前正在创建一个函数,它接受两个s表达式,并返回第一个表达式出现在第二个表达式中的次数。

如果我输入类似于1和'(1 2 3 1 2 3)的内容并返回2,该程序将按预期工作,但对于应返回2的'(1 2)((1 2) 1 2 (1) (2) (1 2))不起作用。

这是我到目前为止的代码

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

1 个答案:

答案 0 :(得分:3)

试试这个:

(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