> (map (λ: ([x : (Pairof Symbol Number)]) (cdr x)) (list (cons (quote a) 0.3) (cons (quote b) 0.2) (cons (quote c) 0.5)))
- : (Listof Number) [generalized from (Pairof Number (Listof Number))]
'(0.3 0.2 0.5)
> (sum '(0.3 0.2 0.5))
- : Real
1.0
> (sum (map (λ: ([x : (Pairof Symbol Number)]) (cdr x)) (list (cons (quote a) 0.3) (cons (quote b) 0.2) (cons (quote c) 0.5))))
. Type Checker: Polymorphic function map could not be applied to arguments:
Types: (a -> c) (Pairof a (Listof a)) -> (Pairof c (Listof c))
(a b ... b -> c) (Listof a) (Listof b) ... b -> (Listof c)
Arguments: ((Pairof Symbol Number) -> Number : ((! False @ (cdr) 0) | (False @ (cdr) 0)) (cdr 0)) (List (Pairof 'a Positive-Flonum) (Pairof 'b Positive-Flonum) (Pairof 'c Positive-Flonum))
Expected result: (Listof Real)
in: (map (λ: ((x : (Pairof Symbol Number))) (cdr x)) (list (cons (quote a) 0.3) (cons (quote b) 0.2) (cons (quote c) 0.5)))
爲什麼第一和第二的表達,> (map ...
和> sum ...
工作,因爲我想到,卻試圖把它們混合起來拋出一個類型的錯誤?類型化的球拍多態函數不能應用於
> sum
- : ((Listof Real) -> Real)
#<procedure:sum>
我不明白爲什麼map
返回一個(Listof Number) [generalized from (Pairof Number (Listof Number))]
而不僅僅是(Listof Number)
的基礎上,我以爲map
一樣。
你應該發佈'sum'的定義 –
只是想指出我沒有在這裏定義'sum'。 – Ben