2015-04-02 81 views
2

在閱讀關於「所有」關鍵字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'和'any'之間有什麼區別?

(即(All (A) (Listof A) ...) VS (Listof any)

回答

3

你的All理解是正確的。這裏發生的事情是Typed Racket正在挑選包含所有列表元素的類型。與Java或ML不同的是,在類型化的球拍中,類型包括數字和字符串,例如(U Number String),這就是類型球拍在這裏選擇的類型。

Any類型包含所有內容,所以它比(U Number String)精確得多。

+0

非常感謝! – Vandermonde 2015-04-02 14:40:34