So wenden Sie zwei Funktionen auf dieselbe Zeichenfolge an, ohne „>>“ zu verwenden
Frage
Ich schreibe eine Funktion wie diese.
func :: IO()
func = putStr print "func = putStr print"
Ich weiß, dass es falsch ist, aber die Idee ist, dass ich das will putStr
dann auf die Saite aufgetragen print
auf dieselbe Zeichenfolge angewendet "fun = .."
so dass die Ausgabe wäre:
func = putStr print "func = putStr print"
Das ist dasselbe wie meine Funktionsdefinition.Danke
Lösung
Wenn Ihr Ziel darin besteht, eine zu schreiben Quine (Ein weiteres Haskell-Beispiel, das in diesem Artikel ebenfalls vorgestellt wird): Sie könnten die Lambda-Notation für die Variablenerfassung verwenden.
func = (\x -> putStr x >> print x) "func = (\\x -> putStr x >> print x) "
Andere Tipps
Ich bin mir nicht sicher, wohin du mit dem "ohne benutzte >>
"Teil (wenn das wirklich der Punkt verwendet wird do
-Notation), aber Sie können problemlos eine Helferfunktion schreiben, die zwei Funktionen nach derselben Eingabe anwendet:
tee f g s = f s >> g s
func = tee putStr print "..."
Um nur das Wiederholen der Zeichenfolge zu vermeiden, eine lokale Variable mit let
oder where
wäre wahrscheinlich der einfachste:
let s = "..."
in putStr s >> print s
Sie könnten es so machen:
doActions str actions = mapM_ ($ str) actions