私はIdrisには新しく、基本的な概念と構文をキャッチしようとしています。Idrisの 'half'関数型シグネチャ
無意味に聞こえるかもしれませんが、私はhalf
自然を半分にする関数を定義しようとしています。
私のような何かを思い付くしたい:
half : (n : Nat) -> (k : Nat) -> (n = k + k) -> (k : Nat)
もちろん、それは働いていません。具体的には:
error: expected: dependent type signature
half : (n : Nat) -> (k : Nat) -> (n = k + k) -> (k : Nat)
可能ですか?
ありがとうございました。
まあ、ありがとう、それは確かにtypechecks。とにかく、私が表現したいのは、「半分:(n:Nat) - > n-> Nat」のようなもので、その結果、「Nat」は実際には最初の「Nat」が半分になるという追加情報です。あなたのケースでは、関数の合計は(すなわち、入力だけを 'Nat'でも受け入れていますか)?あなたが 'Eirther'を使用しているという事実は私には分かりませんが、最初のバージョンでは、' n'が偶数である証拠を半分提供しなければなりません。 。あなたの助けをもう一度ありがとう。 –
「n」がすべて「2 * k」または「2 * k + 1」であるため、2番目のバージョンを合計することができます。もちろん、最初のものはできません。 '1 = 2 * k 'である。 – Cactus