Cactus demonstriert, wie ich meine Frage: Helper Function to Determine if Nat `mod` 5 == 0.Ermitteln, ob die Summe von Vect n Nat gleich 5 teilt?
Er schrieb:
onlyModBy5 : (n : Nat) -> {auto prf : n `modNat` 5 = 0} -> Nat
onlyModBy5 n = n
Dann habe ich diese Funktion zu nutzen versucht anzuwenden onlyModBy5
auf die Summe von Vect n Nat
‚s.
foo : (n : Nat) -> Vect n Nat -> Nat
foo n xs = onlyModBy5 $ sum xs
Aber ich habe diesen Fehler bei der Kompilierung:
When checking right hand side of foo with expected type
Nat
When checking argument prf to function Main.onlyModBy5:
Can't find a value of type
Prelude.Nat.modNatNZ, mod' (foldrImpl (\meth =>
\meth =>
plus meth meth)
0
id
xs)
4
SIsNotZ
(foldrImpl (\meth =>
\meth =>
plus meth meth)
0
id
xs)
(foldrImpl (\meth =>
\meth =>
plus meth meth)
0
id
xs)
4 =
0
Holes: Main.foo
Wie kann ich die oben onlyModBy5
Funktion mit foo
verwenden?
Ich denke, du könntest 'foo' etwas verbessern, indem du explizit' prf' zu 'onlyModBy5k' übertriffst, um die Tatsache zu betonen, dass der Beweis jetzt kommt. – Cactus