Die Verkettung von strings mit foldr in SML
Ich versuche zu erklären, eine Funktion, die string-Liste -> Zeichenfolge, die mit dem Eingang zur Instanz
["Chicago","city","USA"]
zurückkehren sollte "Chicago city USA"
. Was ich bisher war, war dies:
fun gather ts = foldr op ^ "" ts;
Dies scheint zu sein, etwas entlang der Linien, jedoch ist das problem, ich würde gerne mal die Leerzeichen zwischen den Wörtern, wie Sie diese Funktion zurück "ChigagocityUSA"
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, das problem ist, dass
^
ist eine Funktion, die zwei strings "foo" und "bar" zurück "foobar", obwohl Sie wollen "foo bar".Also, was Sie tun müssen, ist zu definieren, eine Funktion, die zwei string-Argumente (als Tupel) und gibt die beiden strings mit einem Leerzeichen dazwischen (so
string1 ^ " " ^ string2
).Können Sie dann geben Sie, dass die Funktion als argument zu
foldr
erhalten Sie das Ergebnis das Sie wollen.ts
ist, da Sie ihn nicht verwenden. Sie können nur tunval hj = fn (a,b) => (a^" "^b)
oderfun hj (a,b) = (a^" "^b)
, das ist das gleiche, aber kürzer. Dannfoldr hj "" ts
, funktioniert gut._
bedeutet nicht "empty string". Wenn Sie ersetzen_
mit""
(das bedeutet "leerer string"), wird es funktionieren.Verwenden
hd
undtl
zu erhalten inital Werte fürfold
. Dies vermeidet eine führende oder nachfolgende Leerzeichen in das Ergebnis.foldl
ist nützlich, wenn Sie wollen, zu denken, von Links nach rechts.Definition:
Verwendung: