5

より高速にすることを期待して、いくつかの数値ラケット コードに型を追加しようとしていますが、以下のコードで for/list マクロ展開を処理するのに行き詰まっています。

(: index-member ((Listof Any) (Listof Any) -> (Listof Index)))
(define (index-member xs ys)
  (filter-not negative?
              (for/list ([(ann i Index) (in-range (ann (length xs) Index))])
                (if (member (list-ref xs i) ys) i -1))))

この関数は、y のメンバーである各 x のインデックスのリストを返します。Racket で動作しますが、Typed Racket の型チェッカーを通過できないようです。具体的には、エラーは次のとおりです。

型チェッカー: マクロ展開のエラー -- 型チェックする型情報が不十分です。次の型注釈を追加してください: (for/list (((ann i Index) (in-range (ann (length xs) Index)))) (if (member (list-ref xs i) ys) i -1) )

型チェッカーを通過する注釈を提供できますか、および/またはこれらの型注釈が不十分である理由を説明できますか?

4

1 に答える 1