Ich lerne Haskell und versuche, dieses Programm zu implementieren. Ich habe einen benutzerdefinierten DatentypVergleich des benutzerdefinierten Datentyps mit Parametern
data CalculatorInput
= Exit
| Error String
| Operator (Int -> Int -> Int)
| Number Int
dann habe ich eine Methode getInput
, die einen Wert dieses Typs zurückgibt.
Jetzt bin ich verwirrt, wie man auf Werte dieses Typs versendet. Ich habe eine Methode
simpleCalculator :: Int -> (Int -> Int -> Int) -> IO()
simpleCalculator ans op = do
input <- getInput -- here i got the type as result
if input == Exit then return()
else if input == Number x then ans = ans op x; print ans
else simpleCalculator ans op
Ich möchte wissen, ob die Eingabe eine Number x
Ich versuchte case
auch zu verwenden:
simpleCalculator :: Int -> (Int -> Int -> Int) -> IO()
simpleCalculator ans op = do
input <- getInput -- here i got the type as result
--case input of
-- Exit -> return()
-- Error x -> print x
-- Number n -> ans = ans op x; print ans -- getting error here, multiple statement not possible
-- _ -> simpleCalculator ans op
Ich versuchte Instanz Eq
auch
instance Eq CalculatorInput where
(==) Exit Exit = True
(==) (Number x) (Number y) = x == y
(==) _ _ = False
Wie kann ich benutzerdefinierte Daten vergleichen Typen mit Parametern oder haben mehrere Anweisungen in einem case
Zweig?
@MathematicalOrchid. es hat nicht funktioniert. Ich habe es versucht. und ich bemerke auch, dass es zu inifnite loop auf let ans geht = op ans n –
@WaqarAhmedm 'let ans = op ans n '- Dies * rekursiv * definiert' ans' in Bezug auf sich selbst. Sie müssen einen neuen Namen verwenden, in diesem Fall verwenden wir oft eine Primzahl '' ':' let ans '= op ans n' – luqui
@ luqui..ich habe es..danke. eine weitere Frage, warum es gut ist, keinen Wert von der SimpleCalculator-Methode zurückzugeben? –