2016-05-01 2 views
0

Ich bin ein Anfänger in Haskell, und das ist eine einfache Frage in Haskell.Eine Funktion "update" die s i v zurückgibt s [v | -> i] in Haskell

Ich versuche nur eine Funktion Update mit der folgenden Signatur zu schreiben, so dass update s i v gibt den Status Update s[v |-> i]. d. h. Zustand, erhalten von s durch Aktualisieren des Werts von v zu i.

hier Mein Code ist:

type Num = Integer 
type Var = String 
type Z = Integer 
type T = Bool 
type State = Var -> Z 

Und was ich versuche zu schreiben eine Funktion

Aber wenn ich diese kompilieren, GHCI gibt, dass

couldn't match expected type 'Z -> State' with actual type '[Char]'. The function 'v' is applied to one argument, but its type 'Var' has none 

Was mich verwirrt ist, dass ich hier kein Z -> State will. Kann mir jemand Hinweise geben? Es tut mir leid, wenn ich diese Frage nicht klargestellt habe. Ich begann gestern Haskell zu lernen: O

Antwort

1

Sie eine Funktion darstellen Ihren neuen Zustand zurückkehren (der Staat scheint eine Funktion von Var -> Z zu sein:

update :: State -> Z -> Var -> State 
update oldState i v = newState 
    where newState v' 
      | v == v' = i 
      | otherwise = oldState v 

lassen Sie sich die wichtigsten Fragen mit Ihrer Version sehen :

  • v i würde bedeuten, dass Sie v bei i auswerten wollen - aber v ist ein Var ~ String so erhalten Sie den Compiler-Fehler (sagen, dass Var keine Argumente haben)
  • Sie noch nicht s verwenden soll dies bedeuten, dass Sie entweder wirklich nicht brauchen, oder Sie vergessen haben, es zu benutzen;)
+0

Danke @Carsten! Ich verstehe das jetzt. Danke für die Hilfe – newinjava

+0

kein Problem - wenn Sie glauben, dass dies Ihre Frage beantwortet, können Sie es als eins markieren, damit andere sehen, dass diese Frage beendet ist – Carsten