我有这段代码:
(define (countHearts cards)
(let* ([count 0])
(map (λ(x)
(match x
[(hearts number) (add1 count)]
[_ #f])) cards))
count)
卡片是这种格式的元素列表“(心号)”当我使用时:
(countHearts '( (hearts 1) (hearts 2)))
它返回(答案应为2):
#<procedure:count>
我想要的只是我的代码计算了我在列表中的“(心号)”(之前定义的类型)的数量,但我一直得到答案。有人有想法吗?我尝试了除add1之外的其他选项,如
!set count (+ count 1)
但结果是一样的。
答案 0 :(得分:2)
尝试:
(define (count-hearts cards)
(for/sum ([card cards])
(match card
[(list 'hearts n) 1]
[_ 0])))
答案 1 :(得分:1)
您的代码无效的原因
(add1 count)
将1添加到计数中,但会将结果抛弃;您需要set!
计算(add1 count)
count
超出范围而你返回了内置程序count
- 需要在let*
或{{}}内返回{1}}表达式(我使用let
,因为这就足够了)let
表达式修改为match
所以代码变成:
(list 'hearts _)
然后
(define (countHearts cards)
(let ([count 0])
(map (λ(x)
(match x
[(list 'hearts _) (set! count (add1 count))]
[_ #f]))
cards)
count))
<强>替代强>
您可以使用内置> (countHearts '((hearts 1) (hearts 2)))
2
程序:
count