我的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)
的含义。
请有人可以向我解释 - 变量的含义是什么,函数得到了什么,它做了什么以及返回的是什么,因为我无法弄明白。
答案 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)