[英]Instantiate the type of the “rest” parameter of a variadic polymorphic procedure when arity is not known in advance in typed Racket
假設我要轉置2 xn的“矩陣”(列表列表) mat
。 在球拍中慣用的方式是
(apply map list mat)
為了在打字/球拍中做同樣的事情,我必須稍微幫助一下類型檢查器。 在這種情況下, map
類型為
(All (c a b ...)
(-> (-> a b ... b c) (Listof a) (Listof b) ... b (Listof c)))
由於我處理的是2 xn矩陣,因此我必須將a和b都實例化為Number
:
(apply (inst map (Listof Number) Number Number)
(inst list Number)
mat)
如果mat
是3 xn的矩陣,
(apply (inst map (Listof Number) Number Number Number)
(inst list Number)
mat)
會做到的。 現在,假設我正在處理一個mxn矩陣,其中m是一些未知的正整數。 有沒有一種通用的實例化map方法,該方法適用於任何m值?
謝謝Sorawee Porncharoenwase,這幾乎解決了我的問題。 這是我所做的:
zip
函數: (: zip (∀ (a) (-> (Listof a) (Listof a) * (Listof (Listof a)))))
(define (zip lst . lsts)
(apply map (inst list a) lst lsts))
mat
: (apply zip (car mat) (cdr mat))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.