不能低于球拍功能

时间:2016-05-06 16:02:49

标签: racket typed-racket

我的proffesor给了我们这个功能:

(: every? : (All (A) (A -> Boolean) (Listof A) -> Boolean))

(define (every? pred lst)
  (or (null? lst)
      (and (pred (first lst))
           (every? pred (rest lst)))))

我无法理解:All (A) (A -> Boolean)的含义。 请有人可以向我解释 - 变量的含义是什么,函数得到了什么,它做了什么以及返回的是什么,因为我无法弄明白。

1 个答案:

答案 0 :(得分:5)

让我们在repl:

中给函数every?一个旋转
> (every? even? (list 1 2 3 4))
#f

> (every? char? (list #\a #\b #\c))
#t

请注意,第一个列表(list 1 2 3 4)的类型为(Listof Number)。 第二个列表(list #\a #\b #\c)的类型为(Listof Char)

lst的{​​{1}}参数应该具有哪种类型? 显然它需要是一个列表,但元素是什么类型的? 我们不知道,因此我们将其设为every?,其中(Listof A)代表。{1}} 某些(未知)类型。

但是,对列表中的元素调用谓词A, 所以类型必须匹配。在第一个示例中:pred具有类型 "从数字到布尔值的函数"又名even?

通常我们需要类型:(A -> Boolean)作为谓词。

这变为:

(A -> Boolean)