Recursion 计算列表中元素的出现次数
我正在编写一个名为countif的函数,它接受一个谓词p?,和一个列表ls。函数返回嵌套列表中满足p?的元素的出现次数? 例如:(count if(lambda(x)(等式?'zx))'((fx)z(((zxcvz)(y '))))将返回3。这是我写的:Recursion 计算列表中元素的出现次数,recursion,scheme,racket,swap,r5rs,Recursion,Scheme,Racket,Swap,R5rs,我正在编写一个名为countif的函数,它接受一个谓词p?,和一个列表ls。函数返回嵌套列表中满足p?的元素的出现次数? 例如:(count if(lambda(x)(等式?'zx))'((fx)z(((zxcvz)(y '))))将返回3。这是我写的: (define (count-if p ls) (cond ((null? ls) '()) ((p (car ls)) (+ 1 (count-if p (cdr ls)))) (else (count-if p
(define (count-if p ls) (cond
((null? ls) '())
((p (car ls))
(+ 1 (count-if p (cdr ls))))
(else
(count-if p (cdr ls)))))
但我只是犯了个错误。我需要一些帮助来找到解决这个问题的更好方法。谢谢 如果,计数的签名是什么?它是:
[X] [X -> Boolean] [List-of X] -> Number
第一个cond
子句返回什么?它返回:
'()
这是一个简单的类型错误。只需将基本大小写更改为0
,如果有效,则将计数
编辑(用于嵌套)
首先,我们将日期的结构定义为嵌套的。
一个符号刚刚输入到score
helper函数中。否则,递归调用将应用于所有嵌套的子
nested
s,并对结果进行汇总
#lang racket
; Nested is one of:
; - Number
; - [List-of Nested]
; Nested -> Number
(define (count-if pred inp)
; Symbol -> Number
(define (score n) (if (pred n) 1 0))
; Nested -> Number
(define (count-if-h inp)
(if (symbol? inp)
(score inp)
(apply + (map count-if-h inp))))
(count-if-h inp))
(count-if (lambda (x) (eq? 'z x)) '((f x) z (((z x c v z) (y)))))
; => 3
这回答了你的问题吗?我改变了,我没有得到一个错误,但我没有得到正确的号码返回。现在,我也很难从嵌套列表中获取计数。我知道我需要检查第一项是否是一个列表,但不确定之后该去哪里。嘿,我忽略了嵌套列表。补充。