查找一个 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
我正在做一个小的个人项目来自学球拍。我目前正在创建一个接受两个 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