无法理解球拍功能

Could not undersand racket function

我的教授给了我们这个功能:

(: 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) 的含义。 请有人可以向我解释 - 变量的含义是什么,函数得到什么,它做什么以及它是什么 return 因为我无法弄清楚。

让函数 every? 在 repl 处旋转一下:

> (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).

every?lst 参数应该是什么类型? 显然它需要是一个列表,但是元素是什么类型的呢? 我们不知道,所以我们把它设为 (Listof A),其中 A 代表 对于某些(未知)类型。

但是谓词 pred 是在列表中的元素上调用的, 所以类型必须匹配。在第一个示例中:even? 具有类型 "function from number to boolean" 又名 (A -> Boolean).

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

这变成:

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