nehmen wir an, könnten Sie Muster-Match auf ++
- jetzt darüber nachdenken, wie man dieses Spiel könnte:
a ++ b = [1,2]
Sie könnte:
a = [1,2]
, b = []
a = [1]
, b = [2]
a = []
, b = [1,2]
jetzt was ist das richtige?
der technischen Grund ist, dass ++
keine Daten-Konstruktor ist;)
in Ihrer spezifischen Situation, die Sie
let describe' [email protected][x,y] = "The first letter of " ++ all ++ " is " ++ [x]
(die nur entsprechen, werden Strings mit Länge verwenden könnte genau 2)
oder besser
let describe' [email protected](x:_) = "The first letter of " ++ all ++ " is " ++ [x]
Spiele
eine sichere Version wäre dies
describe' :: String -> String
describe' "" = "your input was empty"
describe' [email protected](x:_) = "The first letter of " ++ all ++ " is " ++ [x]
Im Grunde kann er nicht wissen, was die Länge der Liste ist und '++' ist eigentlich eine Funktion, so dass Sie Muster dagegen nicht finden können, Haskell patternatch Konstruktoren zum Beispiel. – Netwave
vielleicht weil es zweideutig ist? –
Haskell sieht also nicht '[x] + [y]', es sieht den Rückgabewert von '++', was in diesem Fall eine Liste mehrdeutiger Größe ist? – George