我在阅读关于“全部”的官方球拍文档时感到困惑。关键字found here
考虑示例代码:
(: list-length : (All (A) (Listof A) -> Natural))
(define (list-length lst)
(if (null? lst)
0
(add1 (list-length (cdr lst)))))
(test (list-length (list 1 2 3)) => 3)
(test (list-length (list 1 2 "3")) => 3)
我期待'所有'在强制列表元素属于同一类型的同时允许列表的多态性。
但是第二次测试通过了,所以我的假设显然是错误的。
我出了什么问题,' All'之间的区别是什么?和'任何'?
(即(All (A) (Listof A) ... )
vs (Listof any)
)
答案 0 :(得分:3)
您对All
的理解是正确的。这里发生的是Typed Racket正在挑选一个包含所有列表元素的类型。与Java或ML不同,在Typed Racket中有类型包括数字和字符串,例如(U Number String)
,这是Typed Racket在这里选择的。
Any
类型包含所有内容,因此它不如(U Number String)
精确。