0
我的任務是計算我的列表(列表清單)中的長度爲3的列表的數量。 我想我正確地構建了一切,但是當我想將第一個列表發送到遞歸函數時,它失敗了,因爲我的列表的類型爲Any,而且我找不到使列表成爲列表的方式。定義在球拍中接受列表清單的函數
#lang pl
(: count-3lists : (Listof Any) -> Number)
(define (count-3lists l)
(cond
[(null? l) 0]
[else (+ (count-3lists-helper (first l)) (count-3lists (rest l)))]))
(: count-3lists-helper : (Listof Any) -> Number)
(define (count-3lists-helper l)
(cond [(= (length l) 3) 1]
[else 0]))
(: length : (Listof Any) -> Number)
(define (length l)
(cond
[(null? l) 0]
[else (add1 (length (rest l)))]))
我得到的錯誤是:
. Type Checker: Polymorphic function `first' could not be applied to
arguments:
Types: (Pairof a (Listof b)) -> (a : ((! False @ (car) (0 0)) | (False @ (car) (0 0))) : (car (0 0)))
(Listof a) -> a
Arguments: (Pairof Any (Listof Any))
Expected result: (Listof Any)
in: (first l)
錯誤發生是因爲在count-3lists的定義中,表達式'(first l)'具有類型'Any',但它在上下文中,因爲「count-3lists-helper」的參數,期望有一個「(Listof Any)」。但是,這個問題並不在你的'長度'功能中。你有沒有試過把你的'長度'函數放在一個單獨的文件中? –