Haskell: Was ist der Typ dieser Funktion?
Frage
mifun s = foldr op 0 s
where op x r = head x + r
Gibt es eine Möglichkeit, Ghci zu sagen?
Lösung
Versuchen :t mifun
(kurz für :type mifun
)
was gibt
*Main> :t mifun
mifun :: (Num b) => [[b]] -> b
Also für a b
eine Instanz von num
, mifun
nimmt eine Liste der Listen von b
und gibt eine einzelne aus b
(was in diesem Fall die Summe der ersten Elemente der Listen ist).
Andere Tipps
Dies ist keine wirklich eine Antwort, aber ich brauchte die Formatierung.
NB: mifun
ist ⊥, wenn eine der enthaltenen Listen leer ist. Zum Beispiel:
> mifun [[3], [5, 8], [], [1, 2, 3]]
*** Exception: Prelude.head: empty list
Wenn Sie möchten, dass das Ergebnis des obigen Beispiels 9 beträgt (eine leere Liste, die nicht zur Summe beiträgt), sollten Sie OP als eine der folgenden Möglichkeiten definieren:
mifun s = foldr op 0 s
where op [] r = r
op (x:_) r = x + r
mifun s = foldr op 0 s
where op x r = (if null x then 0 else head x) + r
mifun s = foldr op 0 s
where op x r = sum (take 1 x) + r
Ich würde wahrscheinlich den ersten bevorzugen.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow