无法理解球拍功能
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))
我的教授给了我们这个功能:
(: 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))