So wenden Sie zwei Funktionen auf dieselbe Zeichenfolge an, ohne „>>“ zu verwenden

StackOverflow https://stackoverflow.com/questions/2540324

  •  23-09-2019
  •  | 
  •  

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

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top