Im Gegensatz zu Listen sind Arrays nicht induktiv definiert. Zum Beispiel ist eine Liste entweder eine leere Liste oder ein Paar eines Elements und eine andere Liste. Induktive Datendefinitionen sind nett, da sie erlauben, Daten induktiv, d. H. Rekursiv zu betrachten. Das Array ist eine sehr unterschiedliche Datenstruktur, die als eine feste Anzahl von Elementen des gleichen Typs definiert ist. Also, Ihr Algorithmus wird nicht für Arrays funktionieren. Und das Problem besteht nicht nur in der Syntax. Sie können den Mindestwert nicht durch Induktion auf dem Array ausdrücken. Sie müssen einen anderen Weg finden, um das Minimum auszudrücken, z. B. ein Minimum eines Arrays A
der Größe N
ist ein solches Element, m
, das für alle i, 0 <= i < N
haben wir m <= A(i)
. Wenn Sie dieser Definition folgen, können Sie sie direkt implementieren. Beginnen Sie mit dem ersten Element als Approximation des Minimums, fahren Sie dann mit dem nächsten Element fort, und wenn es kleiner als Ihr aktuelles Minimum ist, aktualisieren Sie Ihre Approximation. Sobald Sie alle Elemente überprüft haben, wird Ihr Minimum die gewünschte Eigenschaft erfüllen.
Was den leeren Fall betrifft, dann können Sie entweder entscheiden, dass das Minimum für das leere Array nicht definiert ist. Tha wird Ihre Funktion nicht-total machen, die Sie explizit darstellen können, indem Sie den Rückgabetyp int option
oder implizit durch Auslösen einer Ausnahme machen und im Kommentar angeben, dass diese Funktion nur für nicht leere Arrays definiert ist. Alternativ können Sie das max_int
als minimales Element für ein leeres Array zurückgeben, da die maximale Untergrenze einer leeren Menge ein Maximalwert des Universums ist (in unserem Fall max_int
).
"1000000000" wird falsche Ergebnisse mit einigen Eingaben geben, sollten Sie einen Weg finden, der keine magische Zahl beinhaltet. – coredump
Sie greifen auf den falschen Weg IMO. Sie können ein Muster für ein Array mit Array-Syntax anpassen. Aber hier gibt es kein head :: tail-Muster. Arrays werden für direkten Zugriff per Index erstellt. Sie könnten das Array in eine Liste konvertieren, wenn Sie bevorzugen. –