Hifriends ist es möglich, dass Funktion mehrere Werte (z. B. String und Boolean) zurückgibt? Wenn ja, dann habe ich eine Funktion namens concat, die einen Booleschen Wert und eine Zeichenkette zurückgibt, aber ich weiß nicht, wie ich diese Funktionen aufrufen soll, weil ich sie speichern möchte. Ich habe einen sehr großen Code geschrieben. Daher kann ich es nicht veröffentlichen.% Co_de%
%Vor%Können Sie mir helfen, die Funktionssignatur zu schreiben und diese Funktionen aufzurufen?
ich brauche nur einen Prototyp
Danke
Wenn Sie mehrere Werte zurückgeben, müssen Sie einen algebraischen Datentyp zurückgeben. Es kann viel dazu gesagt werden, ich werde dir einige Vorschläge machen.
Wenn Ihre Bool
und String
irgendwie zusammenhängender sind und in Ihrem Code oft zusammen vorkommen, definieren Sie einen neuen algebraischen Datentyp:
Sie können es auch mit Accessor-Funktionen definieren, die auch die Daten dokumentieren:
%Vor%und Sie können eine Funktion e definieren. G. zur Initialisierung der Frage:
%Vor%oder (für verbesserte Dokumentation):
%Vor%Dann können Sie mit Ihren Daten mit dem Datenkonstruktor arbeiten:
%Vor%oder Verwendung der Accessor-Funktionen (viele Kombinationen der beiden Ansätze sind möglich):
%Vor%Beispiel für den Aufruf der Funktionen:
%Vor%Wenn Sie keinen neuen Datentyp definieren möchten, verwenden Sie ein vordefiniertes Eintupel. In Standardbibliotheken sind viele Funktionen definiert, die Ihnen die Arbeit mit Tupeln erleichtern. Verwenden Sie die Tupel jedoch nicht überall - größerer Code würde zu einem Durcheinander führen (fehlende Dokumentation - es ist nicht klar, welche Daten das Tupel darstellt), Typfehler wären aufgrund von Polymorphie nicht so einfach zu verfolgen.
Ein Beispiel für eine bequeme Verwendung von Tupeln:
%Vor% Zu viel gesagt über diese einfache Frage, aber da ich die Standardbibliotheksunterstützung als Hauptvorteil von Tupeln erwähnt habe, werde ich das letzte Beispiel geben, das uncurry
function from Prelude verwendet:
Ja, Sie können mehrere Werte mit einem Hakkel-Konstrukt namens Tupel zurückgeben.
Hier ist ein einfaches Beispiel
%Vor% Sie können dann auf den ersten Teil des Tupels mit fst
und auf den zweiten Teil mit snd
zugreifen. Es ist jedoch vorzuziehen, eine Musterübereinstimmung zu finden
oder
%Vor% Nehmen wir nun an, dass Ihre Funktion einige IO ausführt und eine String
und eine Bool
erhält. Ihre Funktion würde dann vage aussehen wie
Wenn Sie in einer Monade mit einem do
-Block arbeiten und diesen verwenden, können Sie auch eine Musterübereinstimmung mit einem hübscheren Formular erstellen.
Beachten Sie, dass in einem do-Block sein muss . Sie können einen do-Block nur verwenden, wenn Sie einen Wert vom Typ m a
zurückgeben, wobei m
eine Monade ist, wie IO
.
Tags und Links haskell