3
Idrisでは、述語に基づいて要素を削除したい場合、filter
,dropWhile
、takeWhile
があります。ただし、これらの関数はすべて、従属ペア(n : Nat ** Vect n elem)
を返します。Idris判定結果のベクトル長
Vect
タイプとして返される関数はありますか?私は考えることができるものについては
:
変換後の長さのベクトルを示すタイプを実装
Vect
に依存ペアに変換
Here
のように、(私はどのように分からないと思いました)上記のアイデアについては、There
、(すべての再変換1のために非常に面倒なようですsult)または2(結果ベクトルの長さを示す型をそれぞれ設計する)。
このような動作を実現する方法はありますか?
dropElem : String -> Vect n String -> Vect ?resultLen String
を私は 'countLemma'が必要とされていないことに気づきました。他の場所で役に立つかもしれないので、私はそこに残します。 https://stackoverflow.com/questions/46528291/can-idris-infer-indices-in-types-of-top-level-constantsが積極的に回答されると、結果の種類を書き留めるのが簡単になります。 – Gregg54654
結果は、結果の 'vect'長さをあらかじめ計算することです。したがって、それは型チェッカーを渡しますか? – gostriderful
はい、それはあなたの例の '?resultLen'の略です:結果のベクトルの長さとそれを知る必要があります。結果のベクトルの長さが追跡するのが複雑になる場合は、ユースケースに応じて複数のオプションがあります。長さを追跡しない 'List'や、知っておく必要のあるプロパティだけを追跡するカスタムデータ型を使うことができます。たとえば、長さの上限です。 – Gregg54654