Frage

mifun s = foldr op 0 s
          where op x r = head x + r 

Gibt es eine Möglichkeit, Ghci zu sagen?

War es hilfreich?

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
scroll top