我运行了此代码,但我不明白输出是2
的?就我而言,输出应始终为1
?
代码:
(define (count p l)
(if (empty? l)
0
(if (p (first l))
(+l (count p (rest l)))
(count p (rest l)))))
(define (ident x)
x)
(count ident '(#true #true #false))
答案 0 :(得分:1)
您的函数count
计算列表中满足谓词p
的元素数。由于您使用ident
作为谓词,因此(ident #true) = #true
和(ident #false) = #false
不会。这意味着您的示例列表中有两个值被计算在内。这与结果2匹配。
答案 1 :(得分:1)
首先,您已使用数字1
而不是字母l
作为列表,因此您的代码甚至不会按原样运行。修好后:
(define (count p l)
(if (empty? l)
0
(if (p (first l))
(+ 1 (count p (rest l)))
(count p (rest l)))))
你应该得到一个2
的输出,正如你所注意到的那样,因为只要(p (first l))
的计算结果为true,该过程基本上就会增加一个。它认为:
> (if #true 1 0)
1
> (if #false 1 0)
0
因此对于列表'(#true #true #false)
,该过程将计数两次,因此结果为2
。