2017-09-26 4 views
1

Ich möchte eine Zeichenfolge in eine Liste von ein Strings in Racket konvertieren:Aufteilen einer Zeichenfolge in Racket

(string-split-wishful "abcd" "") => (list "a" "b" "c" "d") 

Dies ist die Funktion, die ich nur wünschen kann. Die nächste Sache ist string-split das nicht tut, was ich will:

(string-split "abcd" "") => (list "" "a" "b" "c" "d" "") 

Wie fange ich am Anfang der überflüssigen leeren Saiten zu befreien und am Ende? Ich weiß, dass ich so etwas wie (reverse (cdr (reverse (cdr (string-split "abcd" ""))))) machen kann, aber ich möchte wissen, ob es eine idiomatische Art und Weise gibt, dies zu tun.

+5

Sie könnten 'verwenden (Karte string (Saiten-> Liste str))'. –

Antwort

2

Try this:

(string-split "abcd" #rx"(?<=.)(?=.)") 
; ==> ("a" "b" "c" "d") 

Es verwendet einen regulären Ausdruck anstelle von String und den regulären Ausdruck aus einer Null-Breite positiven Blick hinter Behauptung, dass sie paßt nur nach einer Figur und eine Breite von Null positive Look-Ahead-Assertion, so dass die Übereinstimmung ein Zeichen auf ihrer rechten Seite benötigt, um übereinzustimmen.

Alexis' Vorschlag ist zu schön, vielleicht sogar eine bessere Leistung zu:

(map string (string->list "abcd")) 
Verwandte Themen