输出不如预期的Racket

时间:2018-03-17 13:54:11

标签: output racket

我运行了此代码,但我不明白输出是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))

2 个答案:

答案 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