2016-04-17 3 views
7

Ich bin auf der Suche nach wie eine Zeichenfolge in LISP durchlaufen, um nach alphanumerischen Zeichen oder Leerzeichen zu suchen. Ein Satz wie "Kaffee ist Freund" ist etwas, das ich als Gültig überprüfen möchte. Aber wenn ich es tue (jeder # 'alpha-char-p "Kaffee ist am besten"'), scheitert es an den Leerzeichen, weil der Platz technisch nicht Alpha-Char ist. Vorschläge?Schleife durch eine Zeichenfolge in Lisp für alphabetische Zeichen ODER Leerzeichen

Danke!

Antwort

8

einfach testen, für alpha-char oder space:

(every 
    (lambda (c) (or (alpha-char-p c) (char= C#\Space))) 
    "coffee is best") 

every nimmt als erster Parameter eine Funktion, die nicht-null bei jedem Elemente der Sequenz zweiten Parameter zurückgeben muss.

8

Mit LOOP:

CL-USER > (loop for c across "tea is best" 
       always (or (alpha-char-p c) 
          (char= C#\space))) 
T 
4

auf der Komplexität der Aufgabe abhängig, dann kann man auch reguläre Ausdrücke verwenden. Wenn Sie CL-PPCRE laden, können Sie schreiben:

(ppcre:scan "^[ a-zA-Z]*$" "Coffee is Friend") 

Der reguläre Ausdruck, die von der Bibliothek akzeptiert wird, ist ein Perl-wie String oder ein Parse-Baum. Zum Beispiel gibt (ppcre:parse-string "^[ a-zA-Z]*$") Aufruf:

(:SEQUENCE 
:START-ANCHOR 
(:GREEDY-REPETITION 0 
        NIL 
        (:CHAR-CLASS #\ 
            (:RANGE #\a #\z) 
            (:RANGE #\A #\Z))) 
:END-ANCHOR) 

Die obige Form hat seinen Nutzen, wenn Sie reguläre Ausdrücke kombinieren, weil es viel einfacher, als verketten und zu entkommen Strings ist.

Verwandte Themen