我正在开展一个小型的个人项目来自学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)))))
答案 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