Problem mit "Looping" IO in Haskell

7

Ich bin neu bei Haskell, also versuche ich, ein einfaches textbasiertes Spiel mit zwei Spielern zu machen, um mir zu helfen, es zu lernen.

Ich bin jedoch auf das Problem gestoßen, IO in einer "Schleife" auszuführen. Soweit mir bekannt ist, können Variablen, die aus Benutzereingaben gesetzt werden, nur dann verwendet werden, wenn sie innerhalb von main gesetzt sind. Dies ist ein Problem, da ein rekursiver Aufruf von main für mich nutzlos ist, da main keine Argumente entgegennimmt. Idealerweise hätte ich eine Funktion namens main, die sich selbst aufruft, bis ein Spieler verliert. Dies scheint jedoch nicht zu funktionieren, da die Verwendung beliebiger Variablen, die in dieser Funktion durch Benutzereingaben gesetzt werden, zu Typfehlern führt.

Die Struktur des Programms ist wie folgt:

* Spieler 1 nach Name fragen und player1 Variable einstellen.

* Spieler 2 nach Name fragen und player2 Variable einstellen.

* Die "Schleife": Abwechselnd zwischen jedem Spieler, Aufforderung für Befehle, bis ein Spieler verliert.

Was wäre der beste Weg zur Lösung dieses Problems?

    
daedalic 22.07.2011, 04:46
quelle

2 Antworten

22
  

Idealerweise hätte ich eine Funktion namens main, die sich selbst aufruft   bis ein Spieler verliert. Aber das scheint nicht zu funktionieren, seit dem Gebrauch   Alle Variablen, die in dieser Funktion durch eine Benutzereingabe festgelegt werden, führen zu type   Fehler.

Das ist durchaus möglich. Bitte geben Sie beim nächsten Mal einen Code an, damit wir Ihnen durch Ihr Missverständnis helfen können. Hier ist ein Beispiel Code-Ausschnitt:

%Vor%

Um Pufferprobleme zu behandeln.

%Vor%

Hinweis main kann eine andere Funktion ( loop ) aufrufen, die in der IO-Monade lebt. Diese andere Funktion ist in der Lage, Benutzereingaben zu erhalten und zu beeinflussen, sich selbst aufzurufen und / oder Argumente entgegenzunehmen.

%Vor%

Und loop macht einfach einen simpel-dummen Job, um nach einer Binäreingabe zu fragen (den Zähler inkrementieren oder nicht) und, gut, Schleifen.

Wenn das nicht hilft, dann können Sie vielleicht eine etwas umfassendere Frage und einen Code posten. Ich werde mit einer aktualisierten Antwort bearbeiten.

    
Thomas M. DuBuisson 22.07.2011 05:00
quelle
6

Oder Sie könnten forever verwenden.

%Vor%

Wenn Sie neu bei Haskell sind, schlage ich vor, dass Sie LYAH für eine gute Einführung durchgehen.

    
sanjoyd 22.07.2011 05:56
quelle

Tags und Links