Что такое подпись count-if
? Это:
[X] [X -> Boolean] [List-of X] -> Number
Что возвращает первое предложение cond
? Возвращает:
'()
Это ошибка простого типа. Просто измените базовый случай на 0
и count-if
работает.
Редактируйте (для вложенных).
Сначала мы определим структуру даты как Nested
. Символ только что подается в вспомогательную функцию score
. В противном случае рекурсивный вызов применяется ко всем вложенным под nested
с, и результаты суммируются.
#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