Haskell - In einer Liste gespeicherte Benutzereingaben


Matt G

Ich möchte eine Benutzereingabe aufnehmen und als Liste speichern, die ich später durchsuchen kann. Im Moment habe ich eine leere Liste namens "Sales" und diese Funktion, um eine Eingabe aufzunehmen und in dieser Liste zu speichern.

sales = []

recordPurchase ::  IO ()
recordPurchase = do
    putStrLn "Manufacturer"
    manufacturer <- getLine
    putStrLn "Product Name"
    product <- getLine
    let sales = sales ++ [manufacturer, product]
    print sales

Im Moment bekomme ich eine

"*** Exception: <<loop>>"

Error. Dieser spezielle Fehler ist jetzt behoben, es lag an der Leitung

let sales = sales ++ [manufacturer, product]

Ich bin mir jedoch nicht sicher, wie man zwei Listen miteinander kombiniert, wie es scheint. Selbst als es "funktionierte" bekam ich immer noch eine leere Liste, als der Verkauf gedruckt wurde. Ich weiß nicht, ob ich hier überhaupt auf dem richtigen Weg bin, insbesondere mit der Funktionsdefinition als "IO()".

Der Bonusteil hier ist, wenn ich eine Liste ausfüllen könnte, wie könnte ich sie dann durchsuchen und bestimmte Elemente anzeigen, z. B. Produkte eines bestimmten Herstellers?

AJF

Sie können Variablen in Haskell nicht mutieren. Alle Haskell-Variablen sind unveränderlich.

-- `sales` is now defined as `[]`. It cannot be changed, ever.
sales = []

recordPurchase ::  IO ()
recordPurchase = do
    putStrLn "Manufacturer"
    manufacturer <- getLine
    putStrLn "Product Name"
    product <- getLine
    -- Here, you define a new value called `sales`,
    -- which is recursively defined, since it refers to itself. 
    -- This causes a loop.
    let sales = sales ++ [manufacturer, product]
    print sales

Um zu sehen, warum dies eine Schleife verursacht, betrachten Sie die Definition von salesals Gleichung: sales = sales ++ [manufacturer, product]:

  sales
= sales ++ [manufacturer, product]
= sales ++ [manufacturer, product] ++ [manufacturer, product]
= sales ++ [manufacturer, product] ++ [manufacturer, product] ++ [manufacturer, product]
= (etc)

Was du wahrscheinlich meinst ist folgendes:

recordPurchase ::  IO ()
recordPurchase = do
    putStrLn "Manufacturer"
    manufacturer <- getLine
    putStrLn "Product Name"
    product <- getLine
    print [manufacturer, product]

Die übliche Art der Datenspeicherung ist jedoch die Rekursion. Wir würden es ein bisschen so machen (Pseudocode):

mainLoop :: [String] -> IO ()
mainLoop sales = do
    -- Get new sales info
    newInfo <- getNewInfo

    -- Define a new list with the extra info
    let newSales = sales ++ [newInfo]

    -- Do something with the sales info, e.g. print it
    print newInfo

    -- Go through the 'loop' again, with the new sales info.
    mainLoop newSales

 -- The main program is just the main loop with initial value of `[]`:
 main = mainLoop []

Verwandte Artikel


Haskell, Liste mit Benutzereingaben erstellen

Benjamin Sx Hallo, ich muss eine Liste aus der Benutzereingabe erstellen und aufhören, wenn "END" erkannt wird. Ich lerne Haskell, also ist es ein bisschen verwirrend mit dem IO. Ich habe diesen Code, um die Eingabe rekursiv in eine Liste einzufügen und wenn "

In einer Liste gespeicherte Objekte ausdrucken

Arcadia_Lake Ich bin neu bei Python und bin damit beschäftigt, ein Blackjack-Spiel zu entwickeln. Ich habe mein Kartenspiel fast richtig ausgedruckt, aber ich kann nicht alle in der Liste gespeicherten Karten durchgehen. suits = ['Hearts','Diamonds','Spades','

In einer Liste gespeicherte Datenrahmen ändern

C. Whichard Ich versuche, eine Art Schleifenfunktion zu schreiben, die es mir ermöglicht, den gleichen Codesatz auf Dutzende von Datenrahmen anzuwenden, die in einer Liste gespeichert sind. Jeder Datenrahmen hat die gleiche Anzahl von Spalten und identische Ko

Wie speichert man Benutzereingaben in einer Liste in tkinter?

Sie In meinem Programm möchte ich, dass der Benutzer die Anzahl der verkauften Erwachsenen-, Senioren- und Kinderkarten für jedes Kino in eine Datenbank einträgt. Da ich nicht möchte, dass sich der Code zu wiederholt, dachte ich, eine for-Schleife oder ähnlich

Speichern von Benutzereingaben in einer Liste in Python 3.5.1

katherinethegrape Ich möchte den Benutzer immer wieder zur Eingabe einer Liste von Phrasen auffordern, bis er ENDalle Eingaben des Benutzers eingibt und in einer Liste speichert. Wie kann ich das machen? Mein bisheriger Code: print("Please input passwords one-

Schnelleres Ändern von Benutzereingaben in int in einer Liste?

wegschmeißen Derzeit habe ich diesen Code: mylist = [] t1,t2 = input().split(' ') t1 = int(t1) t2 = int(t2) mylist.append(t1) mylist.append(t2) Gibt es einen effizienteren Weg, dies zu tun? Dorian Turba Bearbeiten Sie eine zuvor erstellte Liste Sie können ver

Erstellen einer Liste aus Benutzereingaben in Prolog

Iqazra In Prolog bin ich kürzlich auf folgendes Problem gestoßen: Definieren Sie ein Prädikat avg_num/0, das den Benutzer interaktiv auffordert, eine Reihe von Zahlen einzugeben (oder das Wort "Stopp" ohne Anführungszeichen, um den Vorgang zu beenden). Das Pro

Mehrere Benutzereingaben anhand einer Liste prüfen

Sunnyside391 Ich habe ein Problem auf meinem zweiten Weg, indem ich sowohl Team 1 als auch Team 2 anhand der Teamliste abgleiche. Die beiden Lösungen, die ich gefunden habe, erforderten, dass beide Eingaben gleich sind, um akzeptiert zu werden. Ist eine Weiles