Kapitel 9 von Test-Driven Development with Idris präsentiert den folgenden Datentyp und removeElem
Funktion.Warum hängt diese Funktion die REPL?
import Data.Vect
data MyElem : a -> Vect k a -> Type where
MyHere : MyElem x (x :: xs)
MyThere : (later : MyElem x xs) -> MyElem x (y :: xs)
-- I slightly modified the definition of this function from the text.
removeElem : (value : a) -> (xs : Vect (S n) a) -> (prf : MyElem value xs) -> Vect n a
removeElem value (value :: ys) MyHere = ys
removeElem value (y :: ys) (MyThere later) = removeElem value (y :: ys) (MyThere later)
Die folgenden Werke:
*lecture> removeElem 1 [1,2,3] MyHere
[2, 3] : Vect 2 Integer
Aber wird folgender Aufruf noch nach ein paar Minuten laufen:
*lecture> removeElem 2 [1,2,3] (MyThere MyHere)
Warum dies, ich gehe davon aus, Kompilation so langsam ?
Ich weiß, es gibt eine offensichtliche Follow-up-Frage in "Wie würde ich' removeElem's Definition "beheben, aber da Sie studieren, nehme ich an, Sie wollen es versuchen und es selbst herausfinden. – Cactus
Danke. Was bedeutet "unbegründet"? –
Ich meinte ursprünglich, dass die Rekursion nicht fundiert ist. Aber jetzt, da ich darüber nachdenke, ist das vielleicht die falsche Terminologie, die ich hier verwenden kann ... – Cactus